Object-C内存管理中的黄金法则
来源:互联网 发布:程序员简历工作业绩 编辑:程序博客网 时间:2024/06/09 20:58
在Object-C中,内存的管理是通过retain和release来对对象的计数器进行加1或者减1来进行管理,当使用一个对象
的时候需要进行对对象的计数器加1,使用完成后要减1进行释放,当计数器等于0的时候对象进行销毁。内存管理的黄
金法则就是,当你对一个对象使用retain的时候,一定要进行relase释放。下面我们使用一个例子来说明这个问题,这个
例子是讲遛狗原理,一个人遛狗的时候需要讲自己的绳子套在狗的脖子上面,其他人想遛狗的时候也得把绳子套到狗的
脖子上面,然后如果不想遛狗了就需要把自己的绳子从狗的身上拿掉,也就是减1,当没有人遛狗的时候,这个狗就进
行销毁。
首先看狗这个类
#import <Foundation/Foundation.h>@interface Dog : NSObject{ int _ID;}@property int ID;@end
#import "Dog.h"@implementation Dog@synthesize ID = _ID;- (void) dealloc{ NSLog(@"Dog %d is dealloc",_ID); [super dealloc];}@end
然后是人这个类
#import <Foundation/Foundation.h>#import "Dog.h"@interface Person : NSObject{ Dog *_dog;}- (void) setDog: (Dog *)aDog;- (Dog*) dog;@end
#import "Person.h"@implementation Person- (void) dealloc{ NSLog(@"person is dealloc"); //把这个人所拥有的狗给释放掉 [_dog release]; [super dealloc];}- (void) setDog: (Dog *)aDog{ if(aDog != _dog){ [_dog release]; _dog = aDog; [_dog retain];//这里让dog计数器加1 }}- (Dog*) dog{ return _dog;}@end
最后是Main函数使用
#import <Foundation/Foundation.h>#import "Dog.h"#import "Person.h"int main(int argc, const char * argv[]){ @autoreleasepool { Dog *dog1 = [[Dog alloc] init]; [dog1 setID:1]; Person *xiaoLi = [[Person alloc] init]; //小丽要遛狗 [ xiaoLi setDog:dog1]; Person *xiaoWang = [[Person alloc] init]; //小王要遛狗 [xiaoWang setDog:dog1]; NSLog(@"dog1 retainCount is %ld",[dog1 retainCount]); [dog1 release]; NSLog(@"dog1 retainCount is %ld",[dog1 retainCount]); [xiaoWang release]; NSLog(@"dog1 retainCount is %ld",[dog1 retainCount]); [xiaoLi release]; } return 0;}
从这里可以看出对于这个内存的分配与释放是如何遵循的,估计以后写代码的时候很多情况下需要画一个图或者好好
想象才能下笔,否则的话很容易出现内存泄露这种事情的发生。
- Object-C内存管理中的黄金法则
- 内存管理-黄金法则
- 内存管理黄金法则
- Object-c学习之路二(oc内存管理黄金法则1)
- Objective-c中的内存管理的黄金法则,OC中最重要的部分
- Objective-c中的内存管理的黄金法则,OC中最重要的部分
- OC内存管理-黄金法则
- 第三讲:Obj-C 内存管理1 - 黄金法则
- 黑马程序员 之 Objective-C 内存管理与黄金法则
- [概念]Objective-C的内存管理,黄金法则的理解
- Object-C中的内存管理
- Object-C中的内存管理
- Object-C 中的内存管理
- Object-C中的内存管理
- 3、内存管理(黄金法则)-OC
- 关于内存管理的黄金法则
- OC 内存管理的黄金法则
- Objective-C的内存管理(一)黄金法则的理解
- fedora17 杂
- RelativeLayout
- 自顶向下的语法分析(修改)
- 【动态规划】教主泡嫦娥
- JAVA XP Windows7 Linux环境变量设置
- Object-C内存管理中的黄金法则
- 大道至简
- Flex event 强引用与弱引用
- 北京城市低保标准5年涨190元-北京-低保标准
- 使用公用表表达式的递归查询(CTE)
- Android RIL 架构学习总结
- 莫言:对故乡魂牵梦萦不会出国定居-莫言-诺贝尔
- 一个简单的数学公式计算特殊日期
- 工作流引擎开发系列一基础知识