iOS语法技巧iOS进阶iOS Tips

Dealloc Block Executor【你好 block,

2015-12-28  本文已影响1430人  iOS程序犭袁

CYLDeallocBlockExecutor【你好 block,再见 dealloc】

Hello block,byebye dealloc!一行代码代替dealloc完成“self-manager”

enter image description here

直接从看图里的第8步骤开始看:
CYLDeallocBlockExecutor 所起作用的地方从第8步骤开始。

模拟weak修饰的property的生命周期

我曾经在我的一篇博文中使用过类似的策略:

全文见: 《runtime 如何实现 weak 属性》

下面做下简要叙述:

我们都知道@property的 weak 属性:

weak 此特质表明该属性定义了一种“非拥有关系” (nonowning relationship)。为这种属性设置新值时,设置方法既不保留新值,也不释放旧值。此特质同 assign 类似, 然而在属性所指的对象遭到摧毁时,属性值也会清空(nil out)。

那么如何让不使用weak修饰的@property,拥有weak的效果?

代码如下所示:

- (void)setObject:(NSObject *)object
{
   objc_setAssociatedObject(self, "object", object, OBJC_ASSOCIATION_ASSIGN);
   [object cyl_executeAtDealloc:^{
       _object = nil;
   }];
}

这样就达到了当 objet 为 nil 时,自动将 self.object 置 nil 的目的,从而就模拟了weak修饰的property的生命周期。

(更多iOS开发干货,欢迎关注 微博@iOS程序犭袁


Posted by 微博@iOS程序犭袁
原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0

上一篇下一篇

猜你喜欢

热点阅读