设为首页 加入收藏

TOP

@property & @synthesize & @dynamic 及相关属性作用探究(二)
2019-08-31 01:03:41 】 浏览:87
Tags:@property @synthesize @dynamic 相关 属性 作用 探究
@end @implementation ViewController - (void)viewDidLoad { __weak typeof(self) weakself = self; dispatch_async(dispatch_queue_create(nil, DISPATCH_QUEUE_CONCURRENT), ^{ weakself.name = @"2222"; }); dispatch_async(dispatch_queue_create(nil, DISPATCH_QUEUE_CONCURRENT), ^{ NSLog(@"%@", weakself.name); }); dispatch_async(dispatch_queue_create(nil, DISPATCH_QUEUE_CONCURRENT), ^{ weakself.name = @"11111"; }); dispatch_async(dispatch_queue_create(nil, DISPATCH_QUEUE_CONCURRENT), ^{ NSLog(@"%@", weakself.name); }); } - (void)setName:(NSString *)name { _name = name; } @end

 

atomic 示例 : 

{lock}
    if (property != newValue) { 
        [property release]; 
        property = [newValue retain]; 
    }
{unlock}        

用atomic会在多线程的设值取值时加锁,中间的执行层是处于被保护的一种状态,atomic是oc使用的一种线程保护技术,基本上来讲,就是防止在写入未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。

引用参考 : http://www.cnblogs.com/Rong-Shengcom/ 

补充

@dynamic: 同样是 @property 对应的关键字, 该关键字需要手动编写, 它会告诉编译器, @property 修饰的属性所对应的 getter 和 setter 是动态绑定, 由用户自己实现, 不需要自动实现, 若该属性是由 readonly 修饰, 则只需要实现一个 getter 即可. 注: 如果属性声明为 dynamic, 且用户没有实现该属性对应的 getter 和 setter, 编译时没有问题, 在用户调用属性的 getter 或 setter 的时候, 就会崩溃,报错 'unrecognized selector sent to instance', 编译时由于是@dynamic, 所以编译器不会报错, 运行时执行对应方法, 即动态绑定.

 

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇React Native封装Toast与加载Load.. 下一篇iOS10 语音播报填坑详解(解决串行..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目