2010-09-07 133 views
0

如何在这种情况下释放内存?你一定要吗?客观c内存管理

- (NSString *) whatHappensHere { 
NSMutableString * mutableString = [[NSMutableString alloc] initWithString:@"Hello"]; 
    // .... 
     // more code ... 
     // ... 
return mutableString; 
} 

回答

3

随着自动释放

- (NSString *) whatHappensHere { 
NSMutableString * mutableString = [[NSMutableString alloc] initWithString:@"Hello"]; 

[mutableString autorelease]; 
return mutableString; 
} 
+1

另外,分配,初始化和自动释放所有的一条线;那么如果你不得不提前退出,你可以[更容易]拥有多个返回语句。 – dreamlax 2010-09-08 00:20:22

+1

是不是一个更好的选择是重写它,就像这样:'NSMutableString * mutableString = [NSMutableString stringWithString:@“Hello”];'因为这需要照顾所有三个一条消息? – jlehr 2010-09-08 03:37:22

+0

这也适用。当你学习时,尽管明确你的内存管理可能是件好事 – willcodejavaforfood 2010-09-08 07:19:42

0

正如willcodejavaforfood所说,惯例是,任何新分配的对象从一个方法返回应autorelease倒是在返回之前。这告诉Objective-C运行时,如果没有人在retain之前(大多数情况下)应用程序事件循环的当前迭代结束,那么它应该被释放。

如果它只是在调用函数的本地使用或返回堆栈,那很好,它迟早会被释放。如果有人最终希望保持它,那么他们必须retain它,所以稍后他们将知道他们自己必须release

(事实上,大多数非init*实用构造函数ObjC基础类串等,做到这一点,或至少一些功能等同的。)