gpt4 book ai didi

objective-c - 返回通过 "convenience constructor"初始化的对象

转载 作者:行者123 更新时间:2023-12-03 07:03:29 26 4
gpt4 key购买 nike

当实例方法返回使用便利构造函数初始化的值时,我是否需要保留该对象,然后在返回中自动释放,以便当便利构造函数的自动释放发生时,它不会删除该对象。

此释放描述会在调用代码之前进行,并通过保留或其他方式获取所有权吗?

- (NSStringMutable *)test {
NSMutableString *description = [NSMutableString stringWithString:@"Test Value"];
return description;
}

或者应该是这样的?

- (NSStringMutable *)test {
NSMutableString *description = [NSMutableString stringWithString:@"Test Value"];
[description retain];
return [description autorelease];
}

调用代码:

NSMutableString *testVar = [[NSMutableString alloc] initWithString:[object description]];

最佳答案

不,你应该没问题:

- (NSStringMutable *)test
{
return [NSMutableString stringWithString:@"Test Value"];
}

这将使对象的保留计数为 1,并将位于自动释放池中。

自动释放池会在特定时间耗尽 - 它不像垃圾收集器。如果您正在实现事件处理程序(例如单击按钮的处理程序),则当您从事件处理代码返回时,自动释放池将被框架耗尽。

如果您使用过这个:

- (NSStringMutable *)test
{
NSMutableString *description = [NSMutableString stringWithString:@"Test Value"];
[description retain];
return [description autorelease];
}

...那么该对象的保留计数将为 2,并且会在自动释放池中两次,并且实际上的行为方式与前面的代码示例相同。

关于objective-c - 返回通过 "convenience constructor"初始化的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1266721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com