哪种变体更正确?
//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];
}
Run Code Online (Sandbox Code Playgroud)
答案是,如果在返回数组后更改了数组会有多少问题?
如果你在方法中创建一个可变数组然后返回它,再也不用它,我认为返回可变版本是好的.您的方法声明NSArray的返回类型这一事实意味着您不能保证该数组是可变的.您不必保证它是不可变的.
另一方面,如果要返回类在内部使用的数组,则返回不可变副本会更安全.在上面的示例中,情况似乎并非如此.
数组的使用者,如果想要保留引用,应该使用copy而不是retain; 如果数组是可变的,它们将获得一个不可变的副本.如果它已经是不可变的,则只会增加引用计数.因此复制不可变对象没有任何惩罚.
换句话说,你的第二个变体很好.(虽然演员(NSArray *)阵容完全没必要.)
| 归档时间: |
|
| 查看次数: |
840 次 |
| 最近记录: |