代理修饰词weak/assign/strong的区别
基于项目报错:
WebViewJavascriptBridgeBase 中定义:
@property (assign) id <WebViewJavascriptBridgeBaseDelegate> delegate;
但是dealloc中没有释放
- (void)dealloc {
self.startupMessageQueue = nil;
self.responseCallbacks = nil;
self.messageHandlers = nil;
}
这个是导致exc_bad_access(code=1,address=0x0) (访问了已经释放的对象)这个crash的原因?
对于weak:指明该对象并不负责保持delegate这个对象,delegate这个对象的销毁由外部控制。
对于strong:该对象强引用delegate,外界不能销毁delegate对象,会导致循环引用(Retain Cycles)
对于assing:也有weak的功效。但是网上有assign是指针赋值,不对引用计数操作,使用之后如果没有置为nil,可能就会产生野指针;而weak一旦不进行使用后,永远不会使用了,就不会产生野指针。
也就是说:weak比assign多了一个功能,当对象消失后自动把指针变成nil。如果想在dellac中调用delegate的某些函数时候,如果是weak会找不到对象,因为被置空了。所以用assign 。
使用weak也是为了防止发生循环引用。
这篇文章写得很清楚:http://blog.csdn.net/zxl2016/article/details/51908853
来自:http://www.jianshu.com/p/66b54e3a3960
http://www.cocoachina.com/bbs/read.php?tid=243250
最新文章
- 浏览器 私有属性&;内核
- 传智播客JavaWeb day06-jstl
- linux项目-之系统安装部署-cobbler
- css颜色表示
- 领域驱动设计(DDD)实现之路
- JAVA生成RSA非对称型加密的公钥和私钥(利用JAVA API)
- lispbox 安装运行.sh的时候出现 lispbox.sh: 2: lispbox.sh: Bad substitution
- leetcode面试准备:Implement Trie (Prefix Tree)
- UI层调用WCF服务实例(源码)
- [转]Traceroute网络排障实用指南(2)
- CentOS 6.5安装之后的网络配置
- react总结
- webstorm配置scss环境
- Html语言,使用<;a>;标签发送电子邮件
- 1.TwoSum
- UIWindow的windowLevel详解
- iOS开发系统类功能划分
- STM32F4XX高效驱动篇2 I2C
- 【HHHOJ】ZJOI2019模拟赛(十三)03.10 解题报告
- call()和apply()
热门文章
- 11 ORA-8102:Index Corruption解析
- Cygwin 技巧
- WinFrom控件双向绑定
- Command line is too long. Shorten command line for testMLDome1 or also for Application default configuration
- kafka之config/server.properties配置参数说明
- 【Luogu P2201】【JZOJ 3922】数列编辑器
- Codeforces 1262E Arson In Berland Forest(二维前缀和+二维差分+二分)
- 最小生成树: HDU1233还是畅通工程
- 模板 - 无旋Treap
- TMS320F28335——SCI串口