iOS 中@Property讲解

新手篇

1、与多线程相关的参数
atomic:默认值、安全、效率低下
nonatomic:不安全但是效率高
无论在MRC还是ARC都可以使用。使用建议无论是在ARC还是MRC下都建议使用nonatomic
2、retain
只能在MRC模式下使用,代表生存的setter的代码都是标准的内存管理代码。使用建议:当属性值是OC对象时,绝大多数使用retain。只有出现了循环引用的使用一边使用retain、一边使用assign
3、assign
在ARC和MRC下都可以使用assign。当属性值是非OC对象的时候使用assign
4、strong
只能在ARC下使用,当属性类型是OC对象时,绝大多数使用strong。只有在出现了循环引用的时候一边使用strong一边使用week
5、week
只能在ARC下使用,当属性的类型是OC对象的时候。只有出现了循环引用。一边使用week一边使用strong
6、readonlyreadwrite
只读、可读可写。无论ARC和MRC都可使用。
7、settergetter
无论ARC和MRC下都可以使用。

进阶篇

原子性
atomic、nonatomic
读写权限
readwrite、readonly、setter、getter
内存管理
assign、weak、unsafe_unretained、retain、strong、copy

原子性

属性关键字用法
atomic原子性(默认),编译器会自动生成互斥锁,对 setter 和 getter 方法进行加锁,可以保证属性的赋值和取值的原子性操作是线程安全的,但不包括操作和访问。
nonatomic非原子性,一般属性都用 nonatomic 进行修饰,因为 atomic 效率低。

读写权限

属性关键字用法
readwrite可读可写(默认),同时生成 setter 方法和 getter 方法的声明和实现。
readonly只读,只生成 getter 方法的声明和实现。
setter可以指定生成的 setter 方法名
getter可以指定生成的 getter 方法名

内存管理

属性关键字用法
assign1. 既可以修饰基本数据类型,也可以修饰对象类型;2. setter 方法的实现是直接赋值,一般用于基本数据类型(修饰对象类型时,不增加其引用计数;) ;3. 修饰基本数据类型,如 NSInteger、BOOL、int、float 等;
weak1. 只能修饰对象类型;2. ARC 下才能使用;3. 修饰弱引用,不增加对象引用计数,主要可以用于避免循环引用;
retain1. MRC 下使用,ARC 下基本使用 strong; setter 方法的实现是 release 旧值,retain 新值,用于OC对象类型。(见下文)
strong1. ARC 下才能使用;2. 原理同 retain;
copy1. setter 方法的实现是 release 旧值,copy 新值,用于 NSString、block 等类型; (见下文)

retain

- (void)setName:(NSString *)name

{
            if (_name != name) {//说明新旧对象不是同一个对象
              [_name release];//release旧的
              _name = [name retain];//retain新的

			}
}

copy

- (void)setName:(NSString *)name

{
       if (_name != name) {
			[_name release];
			 _name = [name copy];
		}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值