@property里能写的东西有什么用
2016-01-20 15:37
330 查看
首先,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。
相关文章推荐
- RHEL6.4 Linux手动安装图形化管理桌面(Xorg+Gnome)
- linux下的tar.gz文件后加md5码文件如何解压使用
- apache mina 与 SEDA
- 新安装和已安装nginx如何添加未编译安装模块/补丁
- iOS应用架构谈(二):View层的组织和调用方案(下)
- iOS应用架构谈(二):View层的组织和调用方案(中)
- iOS应用架构谈(二):View层的组织和调用方案(上)
- Linux系统文件I/O编程(一)---open()等基本函数
- 正则表达式:网站源码匹配图片地址
- docker 基础命令
- AOP 图
- HBase 常用Shell命令
- windows开发的python移植到linux的问题
- 如何修改织梦的提示页面
- hadoop、hbase、hive、zookeeper版本对应关系
- Linux下查看文件和文件夹大小
- HDU 1500 Chopsticks(动态规划)
- iOS应用架构谈(一):架构设计的方法论
- 基于maven的web项目在Eclipse中使用Tomcat调试
- Linux 下安装 nginx-1.9.4.tar.gz