delegate为什么用ASSIGN 而不是retain
2015-11-18 · IT·互联网经理人培训口碑品牌
关注
展开全部
assign 是直接赋值,而retain是引用引数加1;使用retain容易出现内存错误。
一个对象没必要管理自己delegate的生命周期,或者说没必要拥有该对象,所以只要知道它的指针就可以了,用指针找到对象去调用方法,也就是委托实现的感觉。
或者换个角度,从内存管理方面也可以解释这个问题。delegate的生命周期不需要让该对象去控制,如果该对象对其使用retain很可能导致delegate所指向的对象无法正确的释放。
一个对象没必要管理自己delegate的生命周期,或者说没必要拥有该对象,所以只要知道它的指针就可以了,用指针找到对象去调用方法,也就是委托实现的感觉。
或者换个角度,从内存管理方面也可以解释这个问题。delegate的生命周期不需要让该对象去控制,如果该对象对其使用retain很可能导致delegate所指向的对象无法正确的释放。
展开全部
而用retain的话,计数器加1。我们有可能在别的地方期望释放掉delegate这个对象,然后通过一些判断比如说它是否已经被释放,做一些操作。但是实际上它retainCount还是1,没有被释放掉,要在UITableViewController的dealloc里面才被释放掉(这里我只是举个例子,一般retain的对象都是在dealloc里被释放)。这里就会造成一些问题出现。
而如果你确定不会有冲突的问题出现的话,或者你也希望用到delegate的这个对象,直到你不用它为止,那么用retain也未尝不可,只是需要最后release一次。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询