OC系列高级-内存管理关键字

本文详细解析了Objective-C中的内存管理机制,包括MRC模式下@property关键字的使用方法及ARC模式下的内存管理规则,并对比了两种模式下内存管理的区别。

一.MRC中@property关键字

1.set方法处理

assign:直接赋值,默认值

retain:先release原来的值,再retain新值

copy:先release原来的值,再copy新值

2.原子性

atomic:对属性加锁,多线程下线程安全,默认值

nonatomic:对属性不加锁,多线程下不安全,但是速度快

3.读写属性

readwrite:生成getter和setter,默认值

readonly:只生成getter

4.setter和getter

这两个关键字用于给setter和getter方法另外起一个名字

例如:@property(setter = a:,getter = b)int age;相当于取值方法名为b,设值方法名为a

二.自动引入计数器ARC

ARC模式下,创建的新对象由以下关键字来限定

_strong:由_strong修饰的为强指针,对象只要有强指针指向就不会被销毁,每当一个强指针指向一个对象,该对象的RC+1

_unsafe_unretained:这个修饰的对象不会改变RC值,只表示对对象的引用,当所指向的对象销毁时,该指针不会变为nil,仍保留原有的地址

注意点:

1.在ARC模式下,MRC的retain和release等方法不可用,  ARC模式下,@property关于内存管理的修饰符为strong和weak,(MRC下的retain和assign不可用),表示声明为强指针还是弱指针,通常情况都是strong,但是在循环引用却不是

2.在MRC模式下,将一个对象赋值给另一个对象

        Person *p1 = [Person new];
        Person *p2 = [Person new];
        //p2失去对对象的控制权时要先release
        [p2 release];
        p2 = p1;

 三.总结

内存管理只针对对象而言,在MRC模式下,OC通常使用retain关键字,非OC对象通常使用assign关键字,但是循环引用是一个例外,通常需要一端使用retain,一端使用assign,在ARC模式下,OC对象通常使用strong,非OC对象通常使用assign关键字,循环引用是一个例外,通常一端使用strong,一端使用weak

 

转载于:https://www.cnblogs.com/kaihuacheng/p/5631215.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值