Я следую официальный учебник Ваш второй IOS App: Раскадровка и сказал мне, чтобы объявить свойство masterBirdSightingList как это (только конкретный пример и не обязательно знать контекст):назначить NSMutableArray с @property и «копия» атрибут
@property (nonatomic, copy) NSMutableArray *masterBirdSightingList;
Обратите внимание, что есть атрибут копия. а затем синтезировать это свойство:
@synthesize masterBirdSightingList = _masterBirdSightingList;
А рядом есть один метод инициализации, который заставил меня путать:
- (void)initializeDefaultDataList {
NSMutableArray *sightingList = [[NSMutableArray alloc] init];
self.masterBirdSightingList = sightingList;
[self addBirdSightingWithName:@"Pigeon" location:@"Everywhere"];
}
Определенно sightingList выделяется для пространств, а затем ему присваивается свойству masterBirdSightingList. Однако свойство имеет атрибут . это означает, что переменная экземпляра _masterBirdSightingList будет выделена для другого пространства для сохранения материалов от sightingList. Зачем? Почему не непосредственно выделить место для свойства, как это:
self.masterBirdSightingList = [[NSMutableArray alloc] init];
Они одинаковы. – kennytm
Мне интересно знать утверждение self.masterBirdSightingList = sightingList - это просто операция копирования, которая копирует только ссылку или будет выделять новое пространство для хранения содержимого? thx – lookof
Что-то стоит присмотреться: как правило, метод -copy «изменчивого» объекта возвращает непеременный вариант (в вашем случае NSArray). Чтобы исключить исключение, вы должны сами написать метод setter, чтобы вызвать -mutableCopy. –