Как эффективно получить все экземпляры с более глубокого уровня в модели Какао? - PullRequest
1 голос
/ 19 марта 2010

В моем приложении Cocoa Mac у меня есть экземпляр A, который содержит неупорядоченный набор экземпляров B, который в свою очередь имеет упорядоченный набор экземпляров C. Экземпляр C может быть только в одном экземпляре B и B только в одном A.

Я хотел бы иметь неупорядоченный набор всех экземпляров C, доступных в экземпляре A. Я мог бы перечислять все случаи B каждый раз, но это кажется дорогим для того, что мне нужно делать часто. Однако меня немного беспокоит, что отслеживание экземпляров C в A может стать громоздким и привести к несоответствиям, например, если экземпляр C будет удален из B, но не из A.

Решение 1 - Используйте NSMutableSet в A и добавляйте или удаляйте C экземпляры всякий раз, когда я делаю ту же операцию в B.

Раствор 2 - Используйте слабые ссылки NSHashTable в A. При удалении C из B он должен исчезнуть и для A.

Раствор 3 - Используйте отслеживание значения ключа в A, чтобы отслеживать изменения в B, и соответственно обновите NSMutableSet в A.

Решение 4 - Просто переберите все экземпляры B, чтобы создать набор, когда мне это нужно.

Какой путь лучше? Есть ли другие подходы, которые я пропустил?

NB. Я не использую и не буду использовать CoreData для этого приложения.

Ответы [ 2 ]

1 голос
/ 19 марта 2010

Если A имеет набор B объектов, а каждый B объект имеет набор C объектов, вы можете сделать:

NSSet * allCObjectsInA = [anAObject valueForKeyPath:@"bObjects.@distinctUnionOfSets.cObjects"];

Предполагается, что вы можете получить доступ к A B объектам через метод, называемый - (NSSet *) bObjects;, и B 'C объектам с -(NSSet *) cObjects;

0 голосов
/ 19 марта 2010

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

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