delegate为什么用ASSIGN 而不是retain
来源:互联网 发布:天猫国际官方直营 知乎 编辑:程序博客网 时间:2024/06/08 13:52
问:为什么很多内置类如UITableViewController的delegate属性都是assign而不是retain的?答:会引起循环引用。
这里delegate我们只是想得到实现了它delegate方法的对象,然后拿到这个对象的指针就可以了,我们不期望去改变它或者做别的什么操作,所以我们只要用assign拿到它的指针就可以了。
而用retain的话,计数器加1。我们有可能在别的地方期望释放掉delegate这个对象,然后通过一些判断比如说它是否已经被释放,做一些操作。但是实际上它retainCount还是1,没有被释放掉,要在UITableViewController的dealloc里面才被释放掉(这里我只是举个例子,一般retain的对象都是在dealloc里被释放)。这里就会造成一些问题出现。
而如果你确定不会有冲突的问题出现的话,或者你也希望用到delegate的这个对象,直到你不用它为止,那么用retain也未尝不可,只是需要最后release一次。
这里delegate我们只是想得到实现了它delegate方法的对象,然后拿到这个对象的指针就可以了,我们不期望去改变它或者做别的什么操作,所以我们只要用assign拿到它的指针就可以了。
而用retain的话,计数器加1。我们有可能在别的地方期望释放掉delegate这个对象,然后通过一些判断比如说它是否已经被释放,做一些操作。但是实际上它retainCount还是1,没有被释放掉,要在UITableViewController的dealloc里面才被释放掉(这里我只是举个例子,一般retain的对象都是在dealloc里被释放)。这里就会造成一些问题出现。
而如果你确定不会有冲突的问题出现的话,或者你也希望用到delegate的这个对象,直到你不用它为止,那么用retain也未尝不可,只是需要最后release一次。
1 0
- delegate为什么用ASSIGN 而不是retain
- delegate为什么用ASSIGN 而不是retain
- delegate为什么用ASSIGN 而不是retain
- delegate为什么用ASSIGN 而不是retain
- delegate申请属性的时候为什么用assign而不是retain
- 为什么delegate要用assign而不是retain?
- 为什么delegate属性使用assign而不是retain?
- 为什么delegate属性使用assign而不是retain?
- 为什么delegate属性使用assign而不是retain?
- 关于delegate为什么设置为assign而不是retain
- 代理中delegate为什么是用assign直接赋值而不是用retain
- delegate或者protocol申请属性的时候为什么用assign而不是retain
- 为什么delegate属性使用delegate而不是retain?
- 为什么delegate属性使用delegate而不是retain?
- 为什么很多内置类如UITableViewController的delegate属性都是assign而不是retain?
- 为什么很多内置类如 UITableViewController 的 delegate 属性都是 assign 而不是 retain 的
- 为什么很多内置类如UITableViewController的delegate属性都是assign而不是retain的
- IOS-为什么很多内置类如UITableViewController的delegate属性都是assign而不是retain的?
- 程序员面试宝典部分习题
- 总结TreeSet排序问题 .
- “织梦”CMS注入高危漏洞情况
- 使用freemarker生成word,步骤详解并奉上源代码
- ASLR在Windows与Linux系统之间的差别
- delegate为什么用ASSIGN 而不是retain
- 1362 - Exploring Pyramids
- POJ 1569 Myacm Triangles(判定点在三角形内)
- java.net.InetAddress的使用
- uva 1471 - Defense Lines(高效)
- 零基础Web前端工程师学习第一天
- POJ 1028 Web Navigation
- 如何开发一个网站
- K最近邻(KNN)算法原理和java实现