iOS 内存管理笔记

1.苹果的内存管理是通过引用计数的来实现内存的回收的!当你用new/alloc/copy/mutableCopy创建A对象时,A的引用计数为1,当B对象引用A是引用计数为2!(NSobject *B = A这种是弱引用,引用计数不会加1,NSobject *B = [A retain];或者你把A对象存入数组或字典引用计数都加1)

2.copy/mutableCopy区别:当A对象为不可变对象时(NSString *B = [A copy];这时copy相当于retain,A和B指向同一块内存,引用计数都是2.NSMutableString *B = [AmutableCopy];这时mutableCopy相当于new了一个可变对象,A和B的引用计数都是1).当A对象为可变对象时(NSString *B = [A copy];这时copy相当于new了一个不可变对象,A和B的引用计数都是1,NSMutableString *B = [A mutableCopy];这时mutableCopy相当于new了一个可变对象,A和B的引用计数都是1).

3.苹果的内存管理机制有2种ARC(自动引用计数)和MRC(手动引用计数),他们之间的区别在于在MRC模式下你需要手动的为每个对象添加retain和release代码,在ARC下你就不需要手动的去添加这些retain和release代码了,编译器会自动帮你添加这些代码.

4.我们可以通过Product-->Analyze进行静态代码的分析,查看有无内存泄漏.(内存泄漏:应该释放的内存没有释放,内存溢出:请求的内存不够用)

5.ARC和Autorelease的区别:ARC就是编译器会自动帮你添加添加retain和release代码,而Autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的Autorelease pool中,当该pool被释放时,该pool中的所有Object会被调用Release。

6.在创建属性时对retain/copy/assign/strong/weak 关键字的使用.其中绝对部分类属性使用retain或strong(强引用,retain是MRC下使用的,现在用strong不过NSString类是个特例,它的关键字用copy),delegate用(assign或weak,其中weak和assign都是弱引用,它们之间的区别是对象消失后把指针置为nil,避免了野指针,assign用于基础数据类型)

7.ios的内存管理原则:有加有减,最后一个对象的引用计数一定要归零

8. 如果需要对特定文件开启或关闭ARC,可以在工程选项中选择Targets -> Compile Phases -> Compile Sources,在里面找到对应文件,添加flag:打开ARC:-fobjc-arc,关闭ARC:-fno-objc-arc。

9.Xcode5以后关闭ARC模式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值