atomic和nonatomic的关系;@synthesize和@dynamic的关系

atomic,默认是atomic,
两者的区别是:修饰的属性的setter方法和getter方法不同,
atomic修饰的属性的setter和getter方法,stomic在setter方法和getter方法设置和取值的时候有一个安全锁保障,比如线程A正在取currentImage的值,线程B和C同时改动currentImage的值,这时BC线程需等A完成后才能操作

但是atomic所说的线程安全只是保证了getter和setter存取方法的线程安全,并不能保证整个对象是线程安全的。比如等线程A取出值后,线程B将对象release掉了,当线程C去操作的时候就会闪退,所以atomic只能保障线程安全,不能保证。

- (void)setCurrentImage:(UIImage *)currentImage
{
    @synchronized(self) {
        if (_currentImage != currentImage) {
            [_currentImage release];
            _currentImage = [currentImage retain];

        }
    }
}

- (UIImage *)currentImage
{
    @synchronized(self) {
        return _currentImage;
    }
}

nonatomic的setter和getter方法

- (void)setCurrentImage:(UIImage *)currentImage
{
    if (_currentImage != currentImage) {
        [_currentImage release];
        _currentImage = [currentImage retain];

    }
}
- (UIImage *)currentImage
{
    return _currentImage;
}

因为nonatomic不用像atomic一样等待某个线程结束后再操作,所以nonatiomic的处理速度比atomic快

————————————————————————————————
@synthesize和@dynamic,
默认是synthesize的,是系统自动实现setter或者getter方法,
dynamic需要开发者手动实现setter和getter方法,如果未实现,在运行时找不到方法就会carsh。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值