返回对象的副本

时间:2014-06-03 13:22:25

标签: ios objective-c

我无法理解这两段代码之间的区别,因为它们的行为方式相同。

- (NSArray *)handleImages
{
     NSMutableArray *images = [NSMutableArray new];
     //...Do something with the array..
     return [images copy];
}


- (NSArray *)handleImages
{
     NSMutableArray *images = [NSMutableArray new];
     //...Do something with the array..
     return images;
}

2 个答案:

答案 0 :(得分:2)

该方法设置为返回不可变数组。第一个版本在返回之前将它创建的可变数组转换为不可变数组。第二个版本只返回可变数组。第一个版本是一个 clean ,因为调用者需要一个不可变的数组。

答案 1 :(得分:0)

第一个方法返回不可变数组,在这里你不能修改返回的对象。

但第二种方法返回可变数组,您可以在其中修改返回的对象

例: `

- (NSArray *)handleImages
{
     NSMutableArray *images = [NSMutableArray new];
     //...Do something with the array..
     return images;
}

-(void)anyMethod
{
    NSMutableArray *array = (NSMutableArray *)[self handleImages];

    if([array respondsToSelector:@selector(addObject:)])
    {
        [array addObject:@"Any Object"]; // You can add any object to this array
    }
}

`