移动开发 \ iOS \ delegate为什么用ASSIGN 而不是retain

delegate为什么用ASSIGN 而不是retain

总点击18
简介:问:为什么很多内置类如UITableViewController的delegate属性都是assign而不是retain的?答:会引起循环引用。

问:为什么很多内置类如UITableViewController的delegate属性都是assign而不是retain的?答:会引起循环引用。


这里delegate我们只是想得到实现了它delegate方法的对象,然后拿到这个对象的指针就可以了,我们不期望去改变它或者做别的什么操作,所以我们只要用assign拿到它的指针就可以了。


而用retain的话,计数器加1。我们有可能在别的地方期望释放掉delegate这个对象,然后通过一些判断比如说它是否已经被释放,做一些操作。但是实际上它retainCount还是1,没有被释放掉,要在UITableViewController的dealloc里面才被释放掉(这里我只是举个例子,一般retain的对象都是在dealloc里被释放)。这里就会造成一些问题出现。


而如果你确定不会有冲突的问题出现的话,或者你也希望用到delegate的这个对象,直到你不用它为止,那么用retain也未尝不可,只是需要最后release一次。

意见反馈 常见问题 官方微信 返回顶部