2013-06-08 3 views
2

Я смотрю на библиотеку разработчиков для iOS. Свойство называется masterBirdSightingList было создано с типом NSMutableArray .Thats тонким, в реализации они добавили peice кодаМетод сеттера нечетный, может кто-нибудь объяснить

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

Для

Для реализации пользовательского сеттера для свойства мастер списка .. . (и), чтобы переопределить его метод установки по умолчанию, чтобы убедиться, что новый массив остается изменчивым.

Я не совсем уверен, почему это совершенно необходимо. Разумеется, массив не может внезапно измениться с измененного массива на что-то статичное. Этот метод необходим?

Не могли бы вы также уточнить, вызывается ли метод setMasterBirdSightingList каждый раз, когда установлен masterBirdSightingList?

Учебное пособие, о котором я говорю, это available here примерно на полпути вниз по странице.

Спасибо

ответ

3

Не могли бы вы помочь уточнить метод setMasterBirdSightingList называется ли каждый раз, когда masterBirdSightingList установлен?

Да, это - в Objective-C доступ к свойствам реализуется с использованием методов getter и setter. Никаких исключений. Точечная нотация - это просто синтаксический сахар для - (T)foo и - (void)setFoo:(T)arg.

Я не совсем уверен, почему это совершенно необходимо.

Потому что, если вы просто объявили copy свойство, то при установке массива, он будет отправлен на copy сообщение, и возвращает непреложный копию (в какао [Touch], это общее соглашение, что copy возвращает неизменяемую копию, даже если исходный объект был изменен.)

Именно поэтому явная отправка mutableCopy в аргумент не требуется.

Смежные вопросы