Совместное использование экземпляра NSArray для объектов KVO - PullRequest
0 голосов
/ 30 июня 2011

У меня есть класс контроллера, в котором хранится список контактов, и мне нужно поделиться этим списком с объектами, которые будут реализовывать KVO в таком массиве.

Наиболее очевидным решением является использование NSArray вместо NSMutableArray, чтобы каждый мог использовать одну и ту же переменную экземпляра контроллера, и невозможно изменить содержимое массива.

Теперь давайте представим, что этот список может меняться каждые 3 минуты, и только контроллер может обновлять содержимое массива.

Если я удаляю и заново запускаю массив списка контактов, все мои объекты KVO потеряют ссылку на мой массив.

Наконец: NSArray PRO: никто не может изменить содержимое массива NSArray CON: контроллер не может изменить массив без dealloc, поэтому другие объекты потеряли ссылку.

NSMutableArray PRO: контроллер может изменять содержимое массива, все объекты могут легко использовать одну и ту же ссылку на массив NSMutableArray CON: каждый может изменять массив.

Есть предложения?

1 Ответ

1 голос
/ 30 июня 2011

NSArray по моему мнению, учитывая, что он не обновляется очень часто.

Объект, который владеет и изменяет массив, предоставляет его через свойство типа NSArray*.Наблюдатели наблюдают это свойство.Всякий раз, когда объект, которому принадлежит массив, воссоздает его, он устанавливает свойство в новый NSArray, который затем запускает KVO на всех наблюдателях.

В качестве альтернативы, вы можете реализовать индексированные шаблоны доступа длянедвижимость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...