内存管理笔记

MRC手动内存管理:

1.系统不会去检查已释放的对象,也就是说,当一个对象的引用计数为0时,这个对象此时再调用其方法不会报错,(成为野指针),除非开启僵尸调试诊断,一旦开启僵尸诊断就会发现崩溃。

2.当把这个对象赋值为nil时,(成为空指针),再调用其方法,将不会出错,更不会崩溃。3.dealloc方法必须含有[super dealloc],且必须放在函数最后一行。当对象的引用计数为0时,系统就会自动调用对象的dealloc方法,且程序员不能调用dealloc方法,只能是系统自动调用。

4. alloc retain  release  retainCount dealloc  


5.new,alloc,retain,copy,谁生成谁负责释放。

6.成员对象初始化时都为nil  

7. set方法在左边person.name = ?,等同于[person setName: ]get方法右边? = person.name  


8. set方法:

当你需要一个对象时,就进行一次retain; 

当你不需要一个对象时,就进行一次release

当你接受一个新的对象时,需要release旧对象,retain新对象;

若新对象与旧对象是一个对象,就不需要内存管理的代码。

 

9-11 property

9.retain需要在settergetter方法中加入一些内存管理的代码,当属性是一个普通OC对象时,使用retainassign直接赋值,不生成内存管理代码,当属性是一个基本数据时,使用assigncopy复制对象,NSString使用copy 

10.线程安全:nonatomic 非原子,不会生成线程安全的代码,速度快,IOS通常都是这种;atomic原子(默认),会生成线程安全的代码。  

11.控制权限 readwrite可读可写,生成gettersetter方法;readOnly只生成getter方法 

12. 修改方法名称 修改生成的getter方法的名称或setter方法的名称


13.循环引用,其中的一端必须为assign__weak


  1. 自动释放池,只要是从一个方法里返回对象,或快捷的构造方法(类方法),都需使用自动释放池。
  2. 自动内存管理:dealloc中没有[super dealloc]。
  3. 通过类方法创建的对象都放在离它最近的方法池中。
  4. 当自动释放池销毁时,才会解除自动释放对改对象的引用。
  5.   MRCARC  全部   factor-> MRC convert to ARC     局部某类  -fno-objc-arc   
  6. 定义Block类型的格式:返回值 ^block名称)(形参列表)void (^blockName)()  实现格式:^返回值 形参列表 {};        ^ void(){};     int (^sum)(int a, int b) = ^ int (int a, int b){ return a+ b;};
  7. 协议:多态
  8. Block输入按Return键直接弹出大括号加分号。IBAction右击弹出菜单选事件类型,直接连接到视图控制器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值