atomic和nonatomic 的区别

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 的区别)