IOS学习之strong-weak,assign,nonatomic关键字整理
来源:互联网 发布:java 编码url 空格 20 编辑:程序博客网 时间:2024/04/30 00:49
atomic : Objectiv-C 中使用的一种线程保护技术,可以防止在写未完成的时候被领养一个线程读取,造成数据错误。不过这种机制会耗费系统资源。所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么应该选择nonatomic属性。
nonatomic :非原子性访问,不加同步,多线程并发访问会提高性能,如果不加此属性,则默认是两个访问方法都为原子型事务访问。
这里理解得不大好,因为没用过多线程。
assign : 简单赋值,不更改索引计数,多用在基础数据类型和C数据类型。
retain : 先释放旧的对象,然后引用计数+1。
assign和retain的区别:
首先,如果我们用malloc分配了一块内存,并且把它的地址赋给指针a,后面还想用指针b来共享这块内存,即把a赋值(assign)给b,此时a和b指向同一块内存。那么这时候如果a不再需要此内存,还不能直接释放该内存,因为如果a释放了,b还指向内存,这时候去调用b则会发生程序crash。
上面描述的这个问题可以这么解决:我们使用一个引用计数(reference counting),我们给指针a指向的内存设定一个引用计数,当内存被分配并且赋给指针a时,引用计数记为1,当把a赋值给b时引用计数增加到2。这时如果a不再需要使用这块内存,它只需要把引用计数减1,表明自己不再拥有这块内存。b不再使用这块内存时也把计数减1,当引用计数为0时,dealloc函数被调用,内存被回收。
strong-weak
strong : 强变量,这个比较有意思。在xcode4.2之后出来的。举个例子就能明白:
Fraction *f1 = [[Fraction alloc] init];
Fraction *f2 = [[Fraction alloc] init];
当使用手工内存管理时,如果直接f2 = f1,那么会导致f2指向的实例丢失但又没释放内存,所以会出现内存泄露的现象。
但是如果使用ARC,而且f1和f2的属性都是strong,那么f2 = f1会被执行成这样:
[f1 retain]
[f2 release]
f2 = f1;
这些是编译器完成的,我们看不到。这样一来就避免出现内存泄露的问题。
weak :弱变量,这个主要是用于解决循环保持问题而存在的。
当两个强变量互相拥有彼此的引用时,就构成了一个循环保持,如果对象仍然有引用,系统将不能销毁这个对象。一个很典型的例子就是在UIView中,主视图拥有子视图时,子视图的变量要设置为weak属性,这样在主视图被销毁之后,子视图的弱变量会自动被设置为nil。
_ _strong 和_ _ weak
两个都是关键字,可以用于变量的声明中,用于表明强变量和弱变量。
以上均为网上资料的整理,以自己理解的形式写出来。要明白这些,最关键的还是得理解手工内存计数。
- IOS学习之strong-weak,assign,nonatomic关键字整理
- iOS关键字strong/weak/assign/retain/nonatomic/atomic
- iOS关键字strong/weak/assign/retain/nonatomic/atomic
- iOS关键字strong/weak/assign/retain/nonatomic/atomic
- iOS 关键字 copy,assign,strong,retain,weak,readonly,readwrite,nonatomic,atomic,unsafe_unretained的使用与区别
- OC中的关键字,weak,assign,copy,strong,nonatomic,retain
- copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理
- copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理
- copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理
- copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理
- copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理
- copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理
- copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理
- copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理
- copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理
- copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理
- copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理
- copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理
- alter table 常见语法
- Linq查询满足条件记录集
- 设置系统路径
- 关于面试的一些小记
- 密码学基础知识(七)公钥密码
- IOS学习之strong-weak,assign,nonatomic关键字整理
- 推荐一个手把手叫学greendao的好教程
- 技术分享-2015.7.8编
- Got fatal error 1236 from master when reading data from binary log
- 访问FTP站点下载文件,提示“当前的安全设置不允许从该位置下载文件”
- 排序算法!~
- BaseExpandableListAdapter的用法
- 黑马程序员————第十八天
- 【MapReduce】常用计算模型详解