@property的内存管理策略&copy属性修饰符解惑

@property不仅涉及实例变量和存取方法,还包括内存管理策略。本文详细解析了MRC和ARC下的内存管理,如retain、assign、copy等。在NSString和block对象上使用copy修饰符的原因是为了确保数据的稳定性和避免生命周期问题。对于NSString,copy能防止NSMutableString的修改影响到NSString。而对于block,copy能将栈上的_block转化为堆上的_NSConcreteMallocBlock,延长其生命周期,确保在对象存活期间可以正常使用。
摘要由CSDN通过智能技术生成

壹:@property的内存管理策略

@property 的本质:

@property = ivar + getter + setter;

“属性” (property)有两大概念:ivar(实例变量)、存取方法(access method = getter + setter)。

我们都知道, @property修饰符, 系统会给类声明的属性声明默认 (最简单的) 的setter和getter方法.

一般它有如下四个作用:

1.控制set方法的内存管理

①MRC下, @property的内存管理策略:

  • retain : release旧值,retain新值(用于OC对象)
  • assign :直接赋值,不做任何内存管理 (默认,用于非OC对象类型)
  • copy : release旧值,copy新值(一般用于NSString *和block)

②ARC下, @property的内存管理策略 (重点掌握) :

  • copy : NSString *和block对象
  • strong : 除NSString\block以外的OC对象, 强指针引用过, 防止对象被销毁
  • weak : 当两个对象互相引用时, 一端用strong, 一端用weak, 防止循环引用
  • assign : 基本数据类型

2.控制需不需要生成set方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值