Цель C @ свойство для отношений «многие ко» - PullRequest
5 голосов
/ 03 июля 2011

У меня были различные случаи, когда у класса Objective-C есть свойство, которое должно быть классом коллекции (обычно NSArray). Есть ли стандартный способ реализовать это? Было бы замечательно иметь возможность просто использовать @synthesize для настройки этого. Я мог бы просто объявить это свойство как NSMutableArray и @synthesize, но это не позволяет мне принудительно определять, какие типы объектов могут быть помещены в коллекцию, а также не мешает клиентскому коду изменять массив. Обычно я делаю что-то вроде этого:

@property(nonatomic, readonly) NSArray *widgets;

- (void)addWidget:(Widget*)widget;
- (void)removeWidget:(Widget*)widget;
...

Коллекция реализована как NSMutableArray с NSArray, содержащим текущее содержимое, переданное обратно вызывающей стороне. Это кажется большим количеством кода для того, что должно быть распространенным сценарием. Чтобы настроить наблюдение значения ключа, необходимо выполнить еще больше кодов.

Я что-то упустил, или это действительно так много работы для настройки свойства коллекции?

1 Ответ

1 голос
/ 03 июля 2011

Вы можете запретить клиентскому коду изменять ваш массив, объявив свойство как NSArray, но используя NSMutableArray в качестве механизма хранения.Директивы @property и @synthesize по-прежнему будут работать.

На самом деле нет хорошего способа обеспечения безопасности типов объектов, возвращаемых вашим массивом, но программисты Objective-C почти никогда не беспокоятся об этом.Это просто не общая проблема.Если вы действительно хотите, чтобы только объекты определенного типа входили и выходили из вашего массива, вам придется написать класс-оболочку для NSArray, чтобы сделать это.

...