Memory Management

About Memory Management:

 

memory_management

 

MRR: “manual retain-release”

ARC:  Automatic Reference Counting,   和mrr一样,只是编译器在编译的时候加入相应的retain, release, 推荐使用ARC

Garbage Collection: 只在 Mac OS X 支持,iOS不支持

 

Memory Management Policy

Basic Memory Management Rules:

1. You own any object you create. 使用“alloc”,”copy”,”new”,”mutableCopy”开头的method来create一个对象。

2. You can take ownership of an object using retain. 在初始化时,需要作为一个属性值的存储的,需要retain;为了防止一个对象意外的被其他操作使之变成非法状态。

3. When you no longer need it, you must relinquish ownership of an object you own.调用“release”或”autorelease”来释放一个对象的ownership,在Cocoa terminology,释放一个对象的ownership,一般指“release”。

4. You must not relinquish ownership of an object you do not own.

 

Use autorelease to Send a Deferred release

- (NSString *)fullName{

NSString *string =[[ [NSString alloc] initWithFormat: @“%@ %@”, self.firstName, self.lastName]  autorelease];

return string;

}

 

You do not own objects returned by refernce

如ClassName ** 和 id *  ;例子以NSError相关的method给出:

NSString *fileName =<#Get a file name#>;

NSSError *error = nil;

NSString *string = [[NSString alloc] initWithContentsOfFile:fileName encoding:NSUTF8StringEncoding error:&error];

 

if(string == nil){

//Deal with error…

}

// …

[string release];

 

Core Foundation Uses Similar but Different Rules

Core Foundation Objects 的内存管理和Cocoa Objects的内存管理类似,然而,method的命名规则却不一样.对 core foundation Objects,

MyClass *myInstance = [MyClass createInstance];

则不需要释放myInstance 的ownship。

posted @ 2012-06-08 09:58  agefisher  阅读(620)  评论(0编辑  收藏  举报