为什么mutableCopy在这里?

时间:2013-02-13 03:45:20

标签: iphone ios nsmutablearray

Apple正在研究Your Second iOS App。该项目基于ARC。

在研究这个例子时,我对该示例中的以下代码提出了一个问题:

// header
@interface BirdSightingDataController : NSObject

@property (nonatomic, copy) NSMutableArray *masterBirdSightingList;

@end

// implementation
- (void)setMasterBirdSightingList:(NSMutableArray *)newList {
    if (_masterBirdSightingList != newList) {
        _masterBirdSightingList = [newList mutableCopy];
    }
}

- (void)initializeDefaultDataList {
    NSMutableArray *sightingList = [[NSMutableArray alloc] init];
    self.masterBirdSightingList = sightingList;

    …
}

我不知道为什么这段代码覆盖了masterBirdSightingList的默认setter方法。

masterBirdSightingList属性的类型为NSMutableArray,并且已复制到_masterBirdSightingList实例变量,该变量的类型为NSMutableArray。我认为这很完美。

为什么_masterBirdSightingList = [newList mutableCopy];在这里?以防setMasterBirdSightingList:使用NSArray类型的参数调用?

1 个答案:

答案 0 :(得分:2)

这是必需的,因为默认实现只会调用copy,最终会得到一个不可变数组,而不是一个可变数组。