Memory Management
About 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。