gpt4 book ai didi

objective-c - 返回副本或可变对象

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:24 25 4
gpt4 key购买 nike

哪个变体更正确?

//first variant
- (NSArray*) someArray
{
NSMutableArray* mutArr = [[NSMutableArray alloc] init];

//...some operations with mutArr


NSArray* retArray = [mutArr copy];

[mutArr release]; //remove mutArr

return [retArray autorelease];
}

//second variant
- (NSArray*) someArray
{
NSMutableArray* mutArr = [[NSMutableArray alloc] init];

//...some operations with mutArr

return (NSArray*)[mutArr autorelease];
}

最佳答案

答案是,返回后数组又变了,问题有多大?

如果你在你的方法中创建一个可变数组然后返回它,永远不再使用它,我认为返回可变版本是可以的。您的方法声明 NSArray 的返回类型这一事实仅意味着您不能保证该数组是可变的。您不必保证它是不可变的。

另一方面,如果您要返回一个您的类在内部使用的数组,那么返回一个不可变的副本会安全得多。在您上面的示例中,情况似乎并非如此。

数组的使用者,如果他们想保留一个引用,应该使用copy 而不是retain;如果数组是可变的,他们将获得一个不可变的副本。如果它已经是不可变的,那么只会增加引用计数。因此,复制不可变对象(immutable对象)不会受到任何惩罚。

换句话说,您的第二个变体没问题。 (尽管转换为 (NSArray *) 是完全没有必要的。)

关于objective-c - 返回副本或可变对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2075895/

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