iOS中copy,retain,strong,assign,weak的区别以及使用

使用assign: 对基础数据类型 (NSInteger)和C数据类型(int, float, double, char,等)
使用copy: 对NSString
使用retain: 对其他NSObject和其子类

assign就是简单的赋值,不更改引用计数,所以直接使用基础数据

copy是直接拷贝内容,成为一个新的对象。

retain释放旧的对象,将旧对象的值赋给新的对象,并使新的对象的引用计数加1

retain是指针拷贝 copy是分配新的内存属于内容拷贝,在拷贝之前都会释放旧的对象

在ARC中,retain和strong是一致的(声明为强引用);assign和weak是基本一致的(声明为弱引用)

=======弱引用(weak,assign)的出现缘由,以及区别=======================================

弱引用的出现缘由:防止循环应用。

强引用循环:A对象强引用了B对象,B对象也强引用了A。因为都是强引用,也就是无论是A是B都要在对方的引用断了后才能销毁,但要断了引用,就必须对方对象销毁。就会出现这种僵局,为了避免出现这种情况,就应该有一个对象“示弱”,使其为“弱引用”。 weak和assign的区别就是当对象被销毁后,weak会把指针指向的对象置为nil,而assign却不会,所以assign会引起野指针,比较危险。

比较常见的,视图中的父子视图之间的引用:父视图强引用子视图,子视图弱引用父视图。

===atomic与nonatomic====================================================

atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。

转载于:https://www.cnblogs.com/heyuanbo/p/5142588.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值