Bri*_*ian 2 memory-management initialization objective-c return-value autorelease
当一个实例方法返回一个用方便构造函数初始化的值时,我是否需要保留该对象然后在返回中自动释放,以便在方便构造函数的自动释放发生时,它不会删除该对象.
这个版本会在调用代码之前发布描述并使用retain或者其他东西获得所有权吗?
- (NSStringMutable *)test {
NSMutableString *description = [NSMutableString stringWithString:@"Test Value"];
return description;
}
Run Code Online (Sandbox Code Playgroud)
或者它应该是这样的?
- (NSStringMutable *)test {
NSMutableString *description = [NSMutableString stringWithString:@"Test Value"];
[description retain];
return [description autorelease];
}
Run Code Online (Sandbox Code Playgroud)
电话代码:
NSMutableString *testVar = [[NSMutableString alloc] initWithString:[object description]];
Run Code Online (Sandbox Code Playgroud)
不,你应该没事:
- (NSStringMutable *)test
{
return [NSMutableString stringWithString:@"Test Value"];
}
Run Code Online (Sandbox Code Playgroud)
这将使对象的保留计数为1,并且将在自动释放池中.
自动释放池在特定时间耗尽 - 它不像垃圾收集器.如果您正在实现事件处理程序(如按钮单击处理程序),则从事件处理代码返回时,框架会自动释放自动释放池.
如果您使用过此:
- (NSStringMutable *)test
{
NSMutableString *description = [NSMutableString stringWithString:@"Test Value"];
[description retain];
return [description autorelease];
}
Run Code Online (Sandbox Code Playgroud)
...然后该对象的保留计数为2,并且将在自动释放池中两次,并且实际上将以与上一代码示例相同的方式运行.