我们平常在写一个ViewController时,经常会把属性设为strong,如
@property (nonatomic, strong) UITableView * tableView;
@property (nonatomic, strong) NSMutableArray * datasource;
@property (nonatomic, strong) NWListView *listView;
因为在ARC环境中,这些属性会在ViewController dealloc时被释放。
那么代理,block为什么要设置为weak,这样做是为了防止循环引用导致内存泄漏。
weak指针主要用于“父-子”关系,父亲拥有一个儿子的strong指针,因此是儿子的所有者;
但是为了阻止所有权回环,儿子需要使用weak指针指向父亲;
你的viewcontroller通过strong指针拥有一个UITableview,tableview的datasource和delegate都是weak指针,指向viewcontroller,防止回环;
但是为了阻止所有权回环,儿子需要使用weak指针指向父亲;
你的viewcontroller通过strong指针拥有一个UITableview,tableview的datasource和delegate都是weak指针,指向viewcontroller,防止回环;
图片:weak1.jpg
我们新建一个类,首先要考虑的是,这个类会被别人用strong引用,如上图的UITableView,所以这个类的一些delegate要用weak来修饰以防止拥有此类的类就是代理类。
![](http://cdn.cocimg.com/bbs/attachment/Fid_21/21_196874_e58bab41a8aaf04.jpg)