__weak与__block区别

公司最近在招 iOS,我面试了几个人,问到 block 避免循环引用的问题时,发现好多人都说通过添加 __block 修饰词来避免。再加上我对__block__weak也没有区分的太明确,搞得我都有点儿怀疑我自己以前是不是用错了。正好借这个机会来一探究竟~

准备工作

首先我定义了一个类 MyObject 继承 NSObject,并添加了一个属性 text,重写了description方法,返回 text 的值。这个主要是因为编译器本身对 NSString 是有优化的,创建的 string 对象有可能是静态存储区永不释放的,为了避免使用 NSString 引起一些问题,还是创建一个 NSObject 对象比较合适。

另外我自定义了一个 TLog 方法输出对象相关值,定义如下:

#define TLog(prefix,Obj) {NSLog(@"变量内存地址:%p, 变量值:%p, 指向对象值:%@, --> %@",&Obj,Obj,Obj,prefix);}

Read More