OC-nonatomic和atomic相关】的更多相关文章

1.原子和非原子属性1.1>OC在定义属性时又nonatomic和atomic两种选择(1)atomic:原子属性,为setter方法加锁(默认就是atomic)(2)nonatomic:非原子属性,不会为setter加锁1.2>atomic加锁原理@property (assign,atomic) int age;-(void)setAge:(int)age{    @synchronized(self){        _age=age;    } }1.3>nonatomic和at…
都是用于修饰@property声明的变量 assign:用于非oc对象类型,表示直接赋值(默认值) retain:用于mrc中,用于类属性中有oc对象的情况,表示先推断赋值的对象是否和实例对象变量的值相等.                 若不相等则先retain在赋值. (即release旧值,retain新值,用于修饰对象) release:用于mrc中.将对象的引用计数减1 atomic:用于多线程,保证原子性,效率低(默认) nonatomic:修饰不须要多线程的属性,效率高 stron…
nonatomic : 非原子属性 atomic    : 原子属性  如果不写关键字 那么默认就是 原子属性 - 多线程写入属性时,保证同一时间只有一个线程能够执行写入操作 - 单(线程)写多(线程)读线程技术,同样有可能出现"脏数据",重新读一下 - 性能较慢 线程安全 在多个线程进行读写操作的时候,仍然能够保证数据正确 UI线程(主线程) : 共同一个约定,所有更新UI的操作都在主线程上执行! 原因:几乎所有的UIKit 都不是线程安全的!"取舍"为了性能!…
atomic: 保证 setter/getter 这两个方法的一个原语操作.如果有多个线程同时调用 setter 的话,不会出现某一个线程执行  setter 全部语句之前,另一个线程开始执行 setter 情况,相当于方法头尾加了锁一样.    nonatomic:(一般情况推荐用) 不保证 setter/getter 这两个方法的一个原语操作,所以你可能会取到不完整的东西. 比如 setter 方法里面改变两个成员变量,如果你用 nonatomic 的话,getter 可能会取到只更改了其中…
nonatomic是非原子性的,也就是给线程不加原子锁,这样的代码运行效率会更高一点,例如: @property (nonatomic,copy)NSString *userName; @property (atomic,copy)NSString *userName; nonatomic能提高好几倍的效率,所以在属性声明的时候,当不会在多线程下操作此成员的时候声明为非原子性能极大的提高效率,希望看完这篇文后更多的同学能使用这个声明. 参考来源:http://blog.csdn.net/cube…
weak和strong的区别: weak和strong)不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放 ,即使还有weak型指针指向它. 一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除. 可能有个例子形容是妥当的. 想象我们的对象是一条狗,狗想要跑掉(被释放). strong型指针就像是栓住的狗.只要你用牵绳挂住狗,狗就不会跑掉.如果有5个人牵着一条狗(5个strong型指针指向1个对象),除非5个牵绳都脱落 ,否着狗是不会跑…
一.@property 这个关键词的唯一作用就是声明getter.setter方法接口. 二.@synthesize 实现setter.getter方法,找不到实例变量则主动创建一个. 三.nonatomic与atomic        atomic原子操作,提供多线程安全,setter方法会发生变化:基本来讲是防止在写未完成的时候被另外一个线程读取,造成数据错误,但是这种操作的弊端就是非常消耗内存资源,苹果手机的内存资源相当宝贵,所以没有使用多线程间的通讯编程,用nonatomic是一个不错的…
场景:如今项目中有这样一个场景,在一个自定义类型的Property在一个线程中改变的同时也要同时在另一个线程中使用它,使我不得不将Property定义成atomic,但是由此发现atomic并不会保证线程安全,由此我深入查询了解下atomic 与 nonatomic,发现自己之前并不了解atomic 与 nonatomic. 正文: 首先,我们先要弄懂一个问题:什么是原子性? 原子操作是不可分割的操作,在原子操作执行完毕之前,其不会被任何其它任务或事件中断. 被标注atomic会保证这种对Pro…
原子性:并发编程中确保其操作具备整体性,系统其它部分无法观察到中间步骤,只能看到操作前后的结果. 决定编译器生成的getter和setter是否原子(natomic)操作.   i 因此,atomic 效率较低,因为要保证操作完整,线程相对安全:nonatomic 不加同步,多线程并发访问效率高,但线程不安全. 由于锁定机制开销较大,一般 iOS 开发中会使用 nonatomic. atomic 也不是绝对的线程安全.当多个线程同时调用 setter 和 getter 时,就会导致获取的值不一样…
#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]) {#pragma mark -----------------------OC类和对象---------------------------------------------------    /*1 OC-CObjective -- C 简称OC,OC是C语言的扩充,并且OC是iOS和OS…