如果你在Objective c中有一个使用可变对象构建数组或字典的方法,那么你应该复制该对象,还是返回可变版本?这可能是一个意见,但我从来没有能够下定决心。这里有两个例子来说明我在说什么:
- (NSArray *)myMeth
{
NSMutableArray *mutableArray = [NSMutableArray array];
for (int i=0; i<10; i++) {
[mutableArray addObject:[NSNumber numberWithInt:i]];
}
return mutableArray;//in order for calling code to modify this without warnings, it would have to cast it
}
- (NSArray *)myMeth
{
NSMutableArray *mutableArray = [[NSMutableArray alloc] init];
for (int i=0; i<10; i++) {
[mutableArray addObject:[NSNumber numberWithInt:i]];
}
NSArray *array = [[mutableArray copy] autorelease];
[mutableArray release];
return array;//there is no way to modify this
}
答案 0 :(得分:3)
这取决于方法将用于什么,或者返回数组的用途是什么。
按照惯例,在返回可变数组之前复制和自动释放它是正常的,从而遵守对象所有权约定并保护数据一旦返回就不会被更改。