weak reference - 1
2015-05-30 16:02
148 查看
OC对象的Strong Reference和Weak Reference:
看到一篇文章提到__weak 参数的使用并直接上图:
上面提到被定义为__weak参数的weakName 会随着firstName内容指向的变更而自动set nil,而原来被指向的一块内存则自动被销毁。
嘿嘿,但是我非常信奉的一句话一个习惯,不要相信任何一本书!要相信编译器!编译器!编译器!重要的话总是说三遍,首先我就手打了一遍:
编译器结果是没有变化耶,嘻嘻,喜欢捣鼓才是真正的热爱,所以我继续深究下去。所以将每个内容变化前后的地址都输出(要记得,所以变量的操作和变化都基于指针,所以指针才是测变化的最标准的量)
这里发现了吧,赋予__weak参数的变量weakName 的内存地址是和变化前的firstName 地址相同:0x10fca6b40, 当firstName改变后指针指向了地址:0x10fca6ba0,然而被赋予__weak参数的变量还是指向的是0x10fca6b40,所以输出的仍是旧值,这里我想起了一个前辈说的,NSString和 @“ ”这种常量十分特殊(特殊在哪,日后必解决),不适于来测试此种关于地址的程序,例如内存的引用计数等,会有异常不到的结果。
嘿嘿-特殊终于解决,就是内存常量区不好处理,只要你用alloc手动创建就可以完美的测试,因为堆区好处理点(具体为什么,日后解决)
嘿嘿~ 终于解决了。 这验证了weak指针的作用(与强引用的区别),我心安多了 ~
所以那一句话实在重要!永远不要相信一句话,一本书,要相信编译器!!! 上面前辈的例子可不对哦。
-----
在学习Masonry框架的时候见识了一个弱引用的优雅写法(Masonry几乎都是用block实现),特地在这里记录下
猛得一看,肯定让人觉得目瞪口呆的,觉得是什么,贴上用法:
看了上面的代码就很清楚了,就是将self 添加__weak属性 成ws (weak self)
我们将这个宏逐个拆看分析:难点就集中在了__typeof(&*self) 这一部分:
__typeof关键字到底是什么鬼呢?日后再搞吧!
待续...
感谢参考文章:
http://blog.csdn.net/q199109106q/article/details/8565017 http://mobile.51cto.com/iphone-313122.htm
看到一篇文章提到__weak 参数的使用并直接上图:
上面提到被定义为__weak参数的weakName 会随着firstName内容指向的变更而自动set nil,而原来被指向的一块内存则自动被销毁。
嘿嘿,但是我非常信奉的一句话一个习惯,不要相信任何一本书!要相信编译器!编译器!编译器!重要的话总是说三遍,首先我就手打了一遍:
编译器结果是没有变化耶,嘻嘻,喜欢捣鼓才是真正的热爱,所以我继续深究下去。所以将每个内容变化前后的地址都输出(要记得,所以变量的操作和变化都基于指针,所以指针才是测变化的最标准的量)
这里发现了吧,赋予__weak参数的变量weakName 的内存地址是和变化前的firstName 地址相同:0x10fca6b40, 当firstName改变后指针指向了地址:0x10fca6ba0,然而被赋予__weak参数的变量还是指向的是0x10fca6b40,所以输出的仍是旧值,这里我想起了一个前辈说的,NSString和 @“ ”这种常量十分特殊(特殊在哪,日后必解决),不适于来测试此种关于地址的程序,例如内存的引用计数等,会有异常不到的结果。
嘿嘿-特殊终于解决,就是内存常量区不好处理,只要你用alloc手动创建就可以完美的测试,因为堆区好处理点(具体为什么,日后解决)
嘿嘿~ 终于解决了。 这验证了weak指针的作用(与强引用的区别),我心安多了 ~
所以那一句话实在重要!永远不要相信一句话,一本书,要相信编译器!!! 上面前辈的例子可不对哦。
-----
在学习Masonry框架的时候见识了一个弱引用的优雅写法(Masonry几乎都是用block实现),特地在这里记录下
#define WS(weakSelf) __weak __typeof(&*self)weakSelf = self;
猛得一看,肯定让人觉得目瞪口呆的,觉得是什么,贴上用法:
WS(ws); UIView* sv = [UIView new]; sv.backgroundColor = [UIColor blackColor]; [self.view addSubview:sv]; [sv mas_makeConstraints:^(MASConstraintMaker* make){ make.center.equalTo(ws.view); make.size.mas_equalTo(CGSizeMake(300, 300)); }];
看了上面的代码就很清楚了,就是将self 添加__weak属性 成ws (weak self)
我们将这个宏逐个拆看分析:难点就集中在了__typeof(&*self) 这一部分:
__typeof关键字到底是什么鬼呢?日后再搞吧!
待续...
感谢参考文章:
http://blog.csdn.net/q199109106q/article/details/8565017 http://mobile.51cto.com/iphone-313122.htm
相关文章推荐
- JS验证代码时字母或者数字
- JS之——回调函数的简单应用(插曲)
- [LeetCode][JavaScript]Reverse Linked List
- HTML基础 DOM概览(第一天)
- javascript基础(第五天)
- javascript基础(第四天)
- Jquery.Page.js 分页插件的使用
- javascript基础(第三天)
- javascript基础(第二天)
- ./scripts/feeds update -a OpenWrt大招系列
- 2W+汉字转拼音JS字库(UTF-8生僻字等通用无乱码)
- [LeetCode][JavaScript]Contains Duplicate II
- javascript基础(第一天)
- JQuery给网页更换皮肤的方法
- jQuery Validate (登录页面相关验证)
- LeetCode --- Remove Nth Node From End of List
- CSS3 box-shadow(阴影使用)
- jQuery实现给页面换肤的方法
- 《锋利的jQuery》
- 一些实用的 jQuery 技巧