我们平常在写一个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来修饰以防止拥有此类的类就是代理类。

本文探讨了iOS开发中内存管理的重要原则,解释了为什么在ViewController中将属性设为strong的同时,需要将代理和block设为weak以避免循环引用,进而防止内存泄漏。并通过实例介绍了如何正确设置引用类型。
2264

被折叠的 条评论
为什么被折叠?



