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中被触发的。所以导致其中的对象都会被释放。