@property里能写的东西有什么用

首先,property是一种代码生成机制,能够生成不同类型的getter/setter方法。

1.readonly/readwrite(默认)只生成getter,称为只读属性

2.assign/retain/copy

      这三个关键字是在属性对设置器方法里限定和内存管理有关的东西。assign称为标记,意思是不去改变引用计数,在属性为基础数据类型时使用;retain称为持有,也就是说一个指针变量指向对象,并使该对象的引用计数+1;copy是拷贝,即重新开辟一块内存空间存储对象,这个对象跟上下文的对象无关,他们有不同的内存地址。

3.nonatomic/atomic(默认)

非原子性和原子性,非原子性访问,不加同步和多线程并发访问,原子性则相反。

那么非原子性为什么会提高性能,在这里,我们先做个测试

    Person *person = [[Person alloc] init];

    uint64_t begin =  mach_absolute_time();//#import <mach/mach_time.h>
    self.p1 = person;
    uint64_t end =  mach_absolute_time();//#import <mach/mach_time.h>
    NSLog(@"end - begin = %llu",end-begin);
上面的代码在
@property(nonatomic,retain)Person *p1;
@property(atomic,retain)Person *p1;

的运行结果分别是971和2464,从这个测试可以看出,性能上的确有很大提升,那么为什么呢?这是因为 在iOS中使用同步锁的开销比较大。

第二个方面是多线程安全,在逻辑上,当程序在一个线程里对一个对象多次读取数值,而在另外一个线程里,程序对该多想修改数值,如果恰巧又是在不加锁到情况下,那么数值就会很混乱,读取到的数值可能会不对。因此苹果特地写好了atomic机制,atomic就是OC的一种线程保护技术,但是权衡性能的追求,在iphone上如果没有使用多线程间的通讯编程,那么就规定使用nonatomic。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值