关于property的各个修饰符(strong,weak,retain,assign,copy等等)

本文详细总结了Objective-C中property的修饰符,包括atomic与nonatomic的多线程安全性,readwrite与readonly的读写权限,retain与assign、strong与weak的内存管理,以及copy与mutableCopy在处理对象时的深浅拷贝差异。通过实例分析了这些修饰符在实际编程中的应用和注意事项。
摘要由CSDN通过智能技术生成

下面对property的修饰符作一次总结,上网查了不少资料,后面附上参考的资料链接,多谢他们的帮助。

1、atomic 和 nonatomic

atomic是默认的属性,表示对对象的操作属于原子操作,主要是在多线程的环境下,提供多线程访问的安全。我们知道在多线程的下对对象的访问都需要先上锁访问后再解锁,保证不会同时有几个操作针对同一个对象。如果编程中不涉及到多线程,不建议使用,因为使用atomic比nonatomic更耗费系统资源。nonatomic 表示访问器的访问不是原子操作,不支持多线程访问安全,但是访问性能高。

2、readwrite 和readonly

readwrite 是默认的属性,表示可以对对象进行读和写,会生成对象相应的setter和getter方法。readonly 表示只允许读取对象的值,只会生成对象的getter方法。当给readonly类型赋值时,会直接报错。
(上面两项都比较简单,就不自己总结了,来源于这里)。

3、retain和assign

假设有一个属性property,分别用retain和assign修饰的时候,对于操作:

self.property = newValue;

对于retain,相当于完成了以下几步:

if(property != newValue)
{
    [property release];
    property = [newValue retain];
}

对于assign,则是:

property = newValue;

retain会先释放原来的对象,然后给新对象引用计数加1;而assign不增加引用计数,assign的作用是简单赋值,不改变引用计数,对基础数据类型(NSInteger,CGFloat)和C数据类型(int, float, double)等适用。

4、strong和weak

当一个对象不再有strong类型引用指向它的时候,它就会被释放,即使该对象还有weak类型引用指向它,并且还指向该对象的weak引用会被置为nil,防止野指针的出现。

在别的地方看到一个形象的例子,忘了出处是哪里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值