关于oc中内存管理问题
2014-03-26 18:35
344 查看
一 . 不用Xcode的ARC,也就是内存管理自动管理,我们自己管理。
如果只是单纯的开辟一块空间,只要记得release就行了。例如
如果一个类的成员变量是对象,例如
注意两点,一个是setter方法,一个是dealloc方法 例如
这样就做完了,这就是一个模板,任何对象嵌套对象都可以这样实现,当然这是在自己管理内存的情况下,这样做既不内存泄露,又符合内存管理的原则,哪里alloc哪里release
二 不过现在Xcode功能很强大,不需要自己这么管理内存,使用@property,Xcode就可以自己管理。
这样做就完了,以后在遇见对象嵌套对象的,就按照这样的来写,方便简单,永远记住:哪里alloc哪里release
附:关于@autorelease
@autorelease是根据@autoreleasepool来写的,例如
即延期释放,当自动释放池@autoreleasepool回收的时候,调用release,使对象p的计数器-1
如果只是单纯的开辟一块空间,只要记得release就行了。例如
int main(){ Person *p=[[Person alloc] init]; [p release]; return 0; }
如果一个类的成员变量是对象,例如
interface Person:NSObject{ Car *car; }那我们Person对象就要负责管理car的内存
注意两点,一个是setter方法,一个是dealloc方法 例如
interface Person:NSObject{ { Car *_car; //Car是一个类 } -(void) setCar:(Car *)car; -(Car *) car; }
implementation Person{ -(void) setCar:(Car *)car{ if(_car != car){ [_car release]; //先把旧指释放了,在赋新值,并且计数器+1 _car = [car retain]; } } -(Car *)car{ return _car; } -(void) dealloc{ [_car release]; [super dealloc]; //这个父类的dealloc是必须调用的 } }
int main(){ Person *p = [[Person alloc] init]; Car *car = [[Car alloc] init]; p.car =car; //相当于[p setCar:car] [car release]; [p release]; return 0; }
这样就做完了,这就是一个模板,任何对象嵌套对象都可以这样实现,当然这是在自己管理内存的情况下,这样做既不内存泄露,又符合内存管理的原则,哪里alloc哪里release
二 不过现在Xcode功能很强大,不需要自己这么管理内存,使用@property,Xcode就可以自己管理。
interface Person:NSObject{ @property (nonatomic,retain) Car *car; //retain参数就是相当于我省略的代码,retain就是让系统自己实现对象嵌套对象的内存管理 }但是下面的dealloc方法是必须重写的
implementation Person{ -(void) dealloc{ [_car release]; [super dealloc]; //这个父类的dealloc是必须调用的 } }
int main(){ Person *p = [[Person alloc] init]; Car *car = [[Car alloc] init]; p.car =car; //相当于[p setCar:car] [car release]; [p release]; return 0; }
这样做就完了,以后在遇见对象嵌套对象的,就按照这样的来写,方便简单,永远记住:哪里alloc哪里release
附:关于@autorelease
@autorelease是根据@autoreleasepool来写的,例如
Person *p = [[[Person alloc] init] autorelease];就相当于
Person *p = [[Person alloc] init]; [p release];
即延期释放,当自动释放池@autoreleasepool回收的时候,调用release,使对象p的计数器-1
相关文章推荐
- 深入探讨PHP中的内存管理问题
- linux 内存管理机制详细解析
- 解析PHP中的内存管理,PHP动态分配和释放内存
- javascript内存管理详细解析
- javascript错误的认识不用关心内存管理
- xcode 4 制作静态库图文详解
- 简单说说STL的内存管理
- Cocos2d开发1:Xcode与TexturePacker的集成
- windows下objective-c的cocoa框架编程,可以有图形界面哟
- jemalloc优化MySQL、Nginx内存管理
- Xcode5.0.2 资源更新问题
- 【转】JVM内存管理:深入垃圾收集器与内存分配策略
- Mac OS X上搭建本地SVN服务器
- xcode 调试技巧
- xcode 每次 全部 重新 编译 的问题
- Xcode快捷键大全
- Xcode4快速Doxygen文档注释 — 简明图文教程(3分钟后爽歪歪)
- C/C++内存管理详解
- XCode 4.2 新功能 - Storyboard
- Windows CE内存管理