美文网首页iOS
atomic和nonatomic 的区别

atomic和nonatomic 的区别

作者: 兔子547 | 来源:发表于2018-01-11 10:44 被阅读0次

    property 定义属性来修饰用的atomic,nonatomic

    atomic:保证线程安全的,速度不快,因为要保证操作整体完成 (默认的)

    nonatomic:不保证线程安全,速度快,如有多个线程访问同一个属性,会出现无法预料的结果

    两者的区别在与生成的set/get方法上面

    nonatomic 修饰的时候set/get方法是普通的付值

    - (UITextField *) userName {

        return userName;

    }

    - (void) setUserName:(UITextField *)userName_ {

        [userName_ retain];

        [userName release];

        userName = userName_;

    }

    atomic 修饰的时候添加一个线程锁来保证一个方法的完整运行完成,之后在做接下来的事情

    - (UITextField *) userName {

        UITextField *retval = nil;

        @synchronized(self) {(synchronized线程锁 括号内的方法锁住,直到执行完成)

            retval = [[userName retain] autorelease];//添加引用计数方式调用set的时候被释放掉

        }

        return retval;

    }

    - (void) setUserName:(UITextField *)userName_ {

        @synchronized(self) { (synchronized线程锁 括号内的方法锁住,直到执行完成)

            [userName release];

            userName = [userName_ retain];

        }

    }

    相关文章

      网友评论

        本文标题:atomic和nonatomic 的区别

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