RWTaskKit 基于注解形式的任务框架

2017-07-09
阅读 5 分钟
4.5k
对于中大型的App来说,随着业务越来越大, AppDelegate中的代码会成为灾难,难于管理.如何优雅的对其进行管理呢. 所以RWTaskKit为此而生, 从此告别AppDelegate.

OCMock 原理

2017-01-18
阅读 4 分钟
5.3k
是不是很神奇?我们来解析下技术细节. OCMClassMock 不用解释太多了, 通过一个NSProxy来转发message, OCMock中代码也很straightforward,不多言.

Objective-C runtime 拾遗 (四)—— 不常用的进程/线程通信方法

2016-09-17
阅读 3 分钟
6.5k
前段时间在写Promise时,调研了iOS有哪些通信的方法。delegate,notification,GCD是常见的方法,除此之外还有一些方法,在此记录共享一下。

Objective-C runtime 拾遗 (三)——Block冷知识

2016-09-05
阅读 5 分钟
5.7k
上次写代码时需要深入了解Block。发现Block is nothing but a struct。今天又拾一下牙慧,汇总一下资料。顺便记录几个源码中的发现

基于ObjC的轻量级Promise库——RWPromiseKit

2016-03-21
阅读 2 分钟
6.6k
起 闲来无事。在看JavaScript的时候发现Promise这东西不错。将隐藏在异步调用中的逻辑变成了同步调用。 {代码...} 关于Promise,可以看这里和这里 github上搜了一下有一个Star比较多的。大致浏览了一下,mxcl/PromiseKit主要是靠RunLoop的实现的(也有用OperationQueue实现的)。 实现 构思了一下,通过ARC+KVO完全可以实...

如何判断method是否被swizzled(续)

2016-03-04
阅读 4 分钟
8k
上次的文章介绍了一种方法用来检测Objective-C中Method是否被swizzled。但该方法只能检测非系统的方法,即,必须在源文件中的目标方法中添加上述的宏才能Work,对于系统类的方法被Hook就无计可施了。代码整理后我会放到我的github

lldb的若干技巧及拾遗

2016-02-12
阅读 4 分钟
6.9k
help -> hexpression -O -- -> poexpression -- -> pthread until 11 -> th u 11breakpoint modify —condition "self = $myModel" -> br m -c “self == $myModel"

一种Auto Unlock的方法

2016-01-21
阅读 2 分钟
5.9k
黑魔法__attribute__((cleanup))有讲如何使用cleanup来简化使用lock代码。__attribute__这个修饰符很有用,前段时间集中写了一些东西收集这些有意思__attribute__。戳这里

Objective-C runtime 拾遗 (二)——Log message send

2015-12-25
阅读 3 分钟
9.2k
OC的Messaging都是通过改函数的调用的。如[foo bar],会被转化成:Objc_msgSend(foo,@selector(bar))。这个大家应该都知道,不多说。具体参见Apple文档:这里和这里

Playing with __attributes__ (五)

2015-12-18
阅读 1 分钟
4.2k
用于声明一个根类。在Objective-C中,有一个默认的编译Flag-Wobjc-root-class,即不允许声明一个不继承自NSObject的class。使用这个Attribute就可以声明自定义的一个根类。关于Root class,Apple的文档戳这里

Objective-C runtime 拾遗 (一)——NSInvocation 调用Block

2015-12-13
阅读 4 分钟
15.7k
一日在开发之中,遇到这样一个问题,在某些场合,需要用NSInvocation来调用Block,而Block签名并不是固定,即,Block参数类型个数可以不同。

Playing with __attributes__ (四)

2015-12-08
阅读 3 分钟
4.7k
objc_designated_initializer 使用方法 {代码...} 在iOS中也可以写成 {代码...} 该属性可以指定类的初始化方法。指定初识化方法并不是对使用者。而是对内部的现实。譬如,下面这种情况 实例讲解 {代码...} 解释一下: 如果是DESIGNATED_INITIALIZER的初始化方法,就必须调用父类的DESIGNATED_INITIALIZER方法。 [1]没有w...

Playing with __attributes__ (三)

2015-12-06
阅读 2 分钟
5.4k
__attribute__((visibility("visibility_type")))当我们并不希望暴露一个方法时,一般情况使用static关键字来修饰函数。这样编译时该方法就不会被输出到符号表里。详细可参见这篇博文

清除Xcode中的无用Warning

2015-12-02
阅读 1 分钟
8.6k
无论如何,工程与代码必须保持适度的整洁与优雅。以前就有Treat Warning as error的观点,一些IDE都有内置支持这一选项。Xcode戳这里。

如何判断method是否被swizzling

2015-11-04
阅读 2 分钟
5.9k
Objective-C的动态性可以让我们干很多事情。比如method swizzling.但method swizzling有很多负面影响,特别是引入第三方组件后. 如果希望在运行时检测,method是否被swizzling呢?

Playing with __attributes__ (二)

2015-10-23
阅读 2 分钟
6.1k
很多OC的class允许子类重载父类方法,但需要在重载的方法中调用父类方法。如:-[UIViewController viewDidLoad],-[UITableViewCell prepareForReuse]等。 对于这样的情况,objc_requires_super就能派上用场。在父类的方法声明时使用该属性,能够使子类重载方法时必须调用父类方法。

Playing with __attributes__ (一)

2015-10-21
阅读 3 分钟
4.7k
GNU C中,我们可以使用函数属性(Function attribute)为我们的函数定义特定的编译器优化、编译器检查、内存管理、代码生成、调用返回转换。比如:noreturn用于指定该函数没有返回值。format用于指定函数参数中存在打印编码风格的参数。

Objective-C 单例宏

2015-09-15
阅读 3 分钟
3.2k
很多时候,单例都会拥有自己的instance varible,所以这里做了method siwwizling, 你可以重载-(id)init,在其中实现你的初始化逻辑.MyObject.m看起来如下:

ObjectiveC中打印Call Stack的若干方法

2015-09-14
阅读 1 分钟
9.1k
要注意的是,如果IDE中已经添加过All exceptions Breakpoint, 那么 UncaughtExceptionHandler不再生效

Objective C 链式调用

2015-09-11
阅读 2 分钟
4.4k
看了一下代码,其实就是通过一个实现了所有方法的Chaining Method Object,每一个方法都返回一个`Block, 这个Block返回类型为Chaining Method Object,Block`的参数为你想要传入的参数类型。