1

我正在研究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.

masterBirdSightingList属性是类型的NSMutableArray,并被复制到_masterBirdSightingList实例变量中,该实例变量也是类型NSMutableArray。我认为这是完美的。

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

4

1 回答 1

2

它是必需的,因为默认实现将简单地调用copy,您最终将得到一个不可变数组而不是可变数组。

于 2013-02-13T03:49:35.750 回答