委托 详解

1、一个关于委托内使用全局变量和属性变量的经验

经验:
1、属性变量进入委托方法,无论之前retain count为几,出来后将被置为1。
2、全局变量进入委托方法, 无论之前retain count 为几,委托方法执行完后将被dealloc.
3、同样是属性变量,如果在委托方法中使用self.** 则执行完委托方法后,retaincount被置为1.以后再进入其它的委托方法,其retainCount都将是1。
如果在委托方法中使用_***访问变量,则执行完委托方法后此变量将被dealloc,无论它进入之前retaincount是多少。

UISearchBarDelegate 有以上现象,但 UITableViewDelegate的委托方法中就没有这些毛病。 UITableViewDelegate 可以直接使用全局变量。


同一个属性变量,不同的初始化写法,不同的引用计数
写法1:
self.array = [[NSMutableArray alloc]init];
[array retainCount] = 2
写法2:
_array = [[NSMutableArray alloc]init];
[array retainCount] = 1


建议:如果在委托中会用到的变量,建议声明为属性变量。

 我怀疑:UISearchBarDelegate的方法是放在autoreleasepool中被触发的。所以导致其中的对象都会被释放。

原文地址:https://www.cnblogs.com/ygm900/p/3667530.html