美文网首页
automatic 和 noautomatic区别

automatic 和 noautomatic区别

作者: 简单Timor | 来源:发表于2018-08-21 08:30 被阅读92次

    Automatic noautomatic 最大的区别是 Automatic是原子属性的 也是苹果默认的 说的是可以避免一个线程上的对象没设置好的时候进入另一个线程造成混乱,但是Automatic并不是绝对安全的,他只是在setter 和getter方法的时候进行线程保护,并不能完全避免多线程混乱。而且Automatic相对noautomatic非常耗费性能,在iPhone上开发 我通常都选择noautomatic。

    当然选择atomic的时候是有的,如下:
    下面是个 setter时,选择不同修饰符的实例:

    // atomic修饰,不崩溃
    for (int i=0; i< 1000; i++) {
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            self.obj_atomic = [NSObject new];
        });
    }
    // nonatomic修饰,会崩溃
    for (int i=0; i< 1000; i++) {
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            self.obj_nonatomic = [NSObject new];
        });
    }
    

    以上就是atomic在setter方法的时候对相应对象的new进行了保护,避免错乱。

    相关文章

      网友评论

          本文标题:automatic 和 noautomatic区别

          本文链接:https://www.haomeiwen.com/subject/bgfdiftx.html