iOS: 属性声明strong和retain竟然不一样
来源:互联网 发布:下载苹果版助赢软件 编辑:程序博客网 时间:2024/05/15 23:45
在诸多教程中都会讲到:声明属性时用strong或者retain效果是一样的(貌似更多开发者更倾向于用strong)。不过在声明Block时,使用strong和retain会有截然不同的效果。strong会等于copy,而retain竟然等于assign!
当然定义Block还是应该用copy(还有其他需要注意的地方,可以参考这篇文章:iOS: ARC和非ARC下使用Block属性的问题),因为非ARC下不copy的Block会在栈中,ARC中的Block都会在堆上的。
可以这样复现问题。在非ARC环境下,定义一个简单类型,定义一个Block属性,先用正确的copy:
@interface TestCls : NSObject@property (nonatomic, copy) void(^myBlock)();@end
在另一个类型里声明变量:
TestCls *_testObj
然后在一个方法里,比如viewDidLoad中,设置Block变量,注意即便是在非ARC下,没有引用外部变量的Block类型也是__NSGlobalBlock__,而引用外部变量的Block才是__NSStackBlock__,如下代码:
_testObj = [[TestCls alloc] init];int outerVar = 12;_testObj.myBlock = ^void(){ NSLog(@"Block被调用:%d", outerVar);};NSLog(@"Block类型:%@", [_testObj.myBlock class]);
然后在另一个方法里(比如UIButton的点击事件方法里)去执行Block,如下:
_testObj.myBlock();
测试环境是Xcode 6/iOS 7/8,如果最上面myBlock属性声明是copy或者strong的话,Block都会被copy,输出:
Block类型:__NSMallocBlock__Block被调用:12
如果上面myBlock属性声明是retain或者assign的话,Block表现起来就是assign,没有去copy,输出:
Block类型:__NSStackBlock__
总之,strong和retain竟然有不一样的地方,而声明Block属性请务必用copy。
0 0
- iOS: 属性声明strong和retain竟然不一样
- iOS: 属性声明strong和retain竟然不一样
- iOS属性声明strong和retain竟然不一样
- iOS: 属性声明strong和retain竟然不一样
- Block属性声明strong和retain竟然不一样
- iOS copy和retain、strong的区别
- IOS开发中 retain 和 strong 区别
- iOS 属性中strong,weak,assign,retain,copy等特性
- iOS strong,retain,assign,weak,copy属性实测
- strong和retain区别
- iOS中 property中的属性strong 、weak、copy 、assign 、retain 、unsafe_unretained 与autoreleasing区别和作用详解
- assign, copy, retain, nonatomic, strong, weak属性
- NSString属性声明中的copy和retain区别
- NSString属性声明中的copy和retain区别
- NSString属性声明中的copy和retain区别
- NSString属性声明中的copy和retain区别
- NSString属性声明中的copy和retain区别
- NSString属性声明中的copy和retain区别
- TI C6678 DSP与PC Matlab 串口通信研究
- iOS: ARC和非ARC下使用Block属性的问题
- win7系统下python3.4连接mysql数据库
- Nginx+Tomcat+Memcached实现tomcat集群和session共享
- NYOJ 187 快速查找素数
- iOS: 属性声明strong和retain竟然不一样
- (1.1.13)正则表达式30分钟入门
- NoSql中的B-tree、B+tree和LSM-tree
- 【Algorithm】基础算法学习
- Android中asset文件夹和raw文件夹区别
- React同构
- 我在csdn的第一篇文章,回首浙软一年,梳理心思找实习
- 151Reverse Words in a String
- 一个心酸的电话