Клас має властивість (і екземпляр var) типу NSMutableArray із синтезованими доступними засобами (через @property
). Якщо ви спостерігаєте цей масив, використовуючи:
[myObj addObserver:self forKeyPath:@"theArray" options:0 context:NULL];
А потім вставте об’єкт у масив таким чином:
[myObj.theArray addObject:NSString.string];
Повідомлення obserValueForKeyPath ... не надсилається. Однак наступне надсилає належне повідомлення:
[[myObj mutableArrayValueForKey:@"theArray"] addObject:NSString.string];
Це тому, що mutableArrayValueForKey
повертає проксі-об'єкт, який дбає про сповіщення спостерігачів.
Але чи не повинні синтезовані засоби доступу автоматично повертати такий проксі-об'єкт? Який правильний спосіб обійти це - чи варто писати власний доступ, який просто викликає [super mutableArrayValueForKey...]
?