如何在这种情况下释放内存?你一定要吗?客观c内存管理
- (NSString *) whatHappensHere {
NSMutableString * mutableString = [[NSMutableString alloc] initWithString:@"Hello"];
// ....
// more code ...
// ...
return mutableString;
}
如何在这种情况下释放内存?你一定要吗?客观c内存管理
- (NSString *) whatHappensHere {
NSMutableString * mutableString = [[NSMutableString alloc] initWithString:@"Hello"];
// ....
// more code ...
// ...
return mutableString;
}
随着自动释放
- (NSString *) whatHappensHere {
NSMutableString * mutableString = [[NSMutableString alloc] initWithString:@"Hello"];
[mutableString autorelease];
return mutableString;
}
正如willcodejavaforfood所说,惯例是,任何新分配的对象从一个方法返回应autorelease
倒是在返回之前。这告诉Objective-C运行时,如果没有人在retain
之前(大多数情况下)应用程序事件循环的当前迭代结束,那么它应该被释放。
如果它只是在调用函数的本地使用或返回堆栈,那很好,它迟早会被释放。如果有人最终希望保持它,那么他们必须retain
它,所以稍后他们将知道他们自己必须release
。
(事实上,大多数非init*
实用构造函数ObjC基础类串等,做到这一点,或至少一些功能等同的。)
另外,分配,初始化和自动释放所有的一条线;那么如果你不得不提前退出,你可以[更容易]拥有多个返回语句。 – dreamlax 2010-09-08 00:20:22
是不是一个更好的选择是重写它,就像这样:'NSMutableString * mutableString = [NSMutableString stringWithString:@“Hello”];'因为这需要照顾所有三个一条消息? – jlehr 2010-09-08 03:37:22
这也适用。当你学习时,尽管明确你的内存管理可能是件好事 – willcodejavaforfood 2010-09-08 07:19:42