iOS开发笔记1 - 内存管理

iOS内存管理

概念:在iOS中,每个对象内部包含一个指向其父类的isa指针,并且包含一个引用计数retainCount.对一个对象进行内存管理就是关注他的retainCount,这是系统判断这个对象是否被回收的唯一依据,当且仅当retainCount=0对象才会被回收,并且是立即回收。

1.配对原则:只要出现了new,alloc,retain就要在相同作用域配对一个release或autorelease

2.最重要的两个问题:
1>野指针操作
和nil操作的区别: nil操作没有任何问题,而野指针是指存放已经 被释放的对象的地址的指S针
如何避免?在确定不再使用一个对象的后,将其指针赋为nil;

2>内存泄露

3.set方法
if(_obj != obj){
[_obj release];
_obj = [obj retain];
}

4.autorelease
1>自动释放池: @autoreleasepool{     }
对象存入到自动释放池(在自动释放池的作用域中调用了autorelease方法)中,当池子销毁时自动释放池会对其中的所有对象进行一次release操作.
tips:对象往autoreleasepool中存入几次,最终就会调用几次release
2>autorelease作用: 只是将对象存入自动释放池,并不会立刻使retainCount - 1
3>@autoreleasepool的嵌套
@autoreleasepool{
@autoreleasepool{
[obj autorelease];
}
}
在哪个池子的作用域范围内调用autorelease,就会把对象放入哪个池子中
4>什么时候用autorelease: 在类内部的方法创建一个对象,返回时调用autorelease(iOS自带的类都是这样做的)

5.ARC机制
1>概念:
0>>只要有强指针指向一个对象,系统就不会回收该对象
只要没有强指针指向,系统[立即]回收该对象
弱指针不会影响对象被回收
默认情况下,所有的指针都是强指针类型
1>>强指针strong
2>>弱指针weak
2>特点:简单,程序员不用再管理内存
3>一些注意:
1>>[super dealloc] [obj retain] [obj release]不能再被调用了,由系统调用
4>手动内存管理转ARC机制
Refactor->Convert to Objective-C ARC
5>ARC和非ARC共存 添加指令

6>类循环引用 只要把一方的strong改为weak并且在.h文件中使用@class 类名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值