Objective-C 中 @property的使用

MRR中:

例:

@property(nonatomic ,retain,readwrite)NSString *userName;

括号中的参数:

第一个:原子性:1、atomic:多线程环境下,存在线程保护,默认

     2、nonatomic:多线程环境下,不存在线程保护。

第二个:语义:1、assign:直接赋值、默认

  2、retain:保留对象

  3、copy:拷贝对象

第三个:读写性:1、readwrite:生成getter、setter方法,默认。

     2、readonly:只生成getter方法。

还可以有非空性:1、nullable:属性可以为空,默认。

     2、nonull:属性不能为空。

     3、null_resettable:有默认值,如果传入nil,则将属性修改为默认值


循环引入的问题:你调用我,我调用你。

解决方法:让其中一个使用assign,不用retain。


ARC中:

__strong关键字的使用:(相当于MRR中的retain)

1、__strong关键字,用于修饰指向对象的变量,也称作:强引用。

2、__strong告诉编译器需要对比对象retain一次。

3、指向对象的指针变量,默认就是__strong修饰的


__weak关键字的使用:(相当于MRR中的assign)

1、__weak和__strong同样用于修饰变量,weak修饰的对象,此对象不会被retain。

2、__weak修饰的变量,如果此变量指向的对象销毁了,那么weak会自动将此变量设置为nil,以避免产生野指针调用。


weak可以防止循环引用。


@property的修饰符总结:

1、strong相当于非ARC(MRR)中的retain;

2、weak相当于非ARC(MRR)中的assign;

3、copy和之前的copy一样,复制一个对象,并创建strong关联;

4、assign:对象不能使用assign,基本数据类型可以使用。


记: NSString不需要内存管理

NSString用copy

一般对象用strong

基本数据类型用assign

weak用于UI控件、协议代理者




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值