1

私はAppleによるあなたの2番目のiOSアプリを研究しています。このプロジェクトは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;

    …
}

このコードがデフォルトのsetterメソッドであるを上書きした理由はわかりませんmasterBirdSightingList

masterBirdSightingListプロパティはタイプであり、タイプもあるインスタンス変数にNSMutableArrayコピーされます。これは完璧だと思います。_masterBirdSightingListNSMutableArray

なぜ_masterBirdSightingList = [newList mutableCopy];ここにあるのですか?setMasterBirdSightingList:タイプの引数で呼び出された場合に備えてNSArray

4

1 に答える 1

2

これが必要なのは、デフォルトの実装が単に呼び出すだけcopyで、可変配列ではなく不変配列になってしまうためです。

于 2013-02-13T03:49:35.750 に答える