iOS内存管理
来源:互联网 发布:mac自带音频剪辑软件 编辑:程序博客网 时间:2024/06/08 17:02
每个对象都有一个引用计数器(4字节)
1.引用计数为0的时候对象就会被销毁(内存被回收),不为0就不会被销毁,除非程序退出
2.对象刚创建的时候引用计数为1
引用计数器的数值怎么计算
1.创建对象时候默认就是1(alloc, new, copy)
2.给对象发送一条retain消息 加1
3.给对象发送一条release消息 减1
4.给对象发送一条retainCount消息 获取计数器的数值
对象销毁
销毁的前提:引用计数器为0
销毁时做的事情:调用dealloc方法
(一定要调用[super dealloc])
当对象不存在时不可以再relese 和retain
指向不可以内存的指针:野指针错误
非ARC环境下 [super dealloc]必须写
多个对象使用同一个对象,这个对象的引用计数是由这多个对象来控制的,谁使用谁加一,谁不使用谁减一
setDog中
_dog = [dog retain];
内存管理就是确保开辟的堆空间被正确的释放
黄金法则
1.凡是用alloc, retain, new (或使用new开头的方法),copy(或使用copy开头的方法),NSMutableCopy (或使用NSMutableCopy开头的方法)创建的对象都必须使用release或autorelease方法释放。
2.谁创建谁释放(哪个类创建,哪个类释放,谁写alloc,谁写release)
if(_crayFish != crayFish){
[_crayFish release]; = @property (retain) CrayFisn *crayFish
}
_crayFish = [crayFish retain];
非ARC环境下 dealloc要自己手动释放
retain 对象,assign非对象
@property(nonatomic,retain) NSString *str;
浅拷贝:拷贝指针
深拷贝:对象拷贝
retain只是计数器加一,还是同一个对象
copy拷贝的对象不可以被修改
NSMutablecopy拷贝的对象可以背修改
MRC对象的释放看当前对象的引用计数
ARC对象的释放看当前对象有被强引用
__weak弱指针 虽然引用 但是不指向 销毁对象时不考虑弱指针
相互调用时必须有一个是弱引用
- IOS 内存管理
- iOS内存 管理 一点
- ios内存管理
- IOS内存管理小结
- iOS内存管理
- 再论iOS内存管理
- iOS内存管理
- IOS 内存管理
- IOS内存管理
- IOS内存管理
- iOS内存管理
- ios 内存管理基础知识
- ios内存管理
- iOS 内存管理
- IOS内存管理详解
- iOS 内存管理总结
- ios内存管理
- ios 内存管理
- iOS多态继承
- Java中图片压缩处理
- [捉虫记录] access violation writing location _findnext
- Robotium 常用控件应用举例
- Trim()方法
- iOS内存管理
- VC创建启动即隐藏的对话框
- Android应用开发(三):如何完成Activity之间的传递参数
- 一直觉得饿是什么问题
- java构造函数
- android中weight的简单使用
- iOS协议代理
- VC创建桌面快捷方式-VC6.0/VS2010均通过
- 11059 - Maximum Product