Я хочу защитить доступ к NSMutableArray в общедоступном интерфейсе
Я пытаюсь сделать это, определив свойство как NSArray в общедоступном интерфейсе и как NSMutableArray в частном интерфейсе следующим образом:
@interface Order : NSObject
@property (readonly, strong, nonatomic) NSArray* comments;
@end
@interface Order()
@property (readwrite, strong, nonatomic) NSMutableArray* comments;
@end
Но это не работает, поэтому вместо этого я должен определить свойство в общедоступном интерфейсе NSMutableArray:
@interface Order
@property (strong, nonatomic) NSMutableArray* comments;
@end
Цель состоит в том, чтобы предоставить клиентам API доступ только для чтения к комментариям и полный доступ к таким методам, как addObject:
в реализации.
Итак, определение цели более четкое:
- Клиент должен иметь доступ к свойству как NSArray без возможности доступа к методам мутации.
- Клиент не должен иметь возможности обновлять комментарии, чтобы они указывали на новое значение.
- Решение должно быть выполнено без создания лишних структур и копирования массива.
Таким образом, просто вопрос заключался в том, можно ли сделать общедоступное определение свойства более общим (NSArray вместо NSMutableArray).
Есть ли другой чистый способ достичь цели или мне нужно везде использовать NSMutableArray?
РАЗРЕШЕНИЕ
Изучив свой первоначальный вопрос и ответы, я понял, что хотел бы использовать более общий класс NSArray в общедоступном интерфейсе и NSMutableArray в реализации, но это просто невозможно для одного свойства. Так что ответ невозможен.
Поэтому я просто буду использовать одно свойство с NSMutableArray без какой-либо дополнительной защиты.
Но я также выберу наиболее подходящий ответ, который может помочь, если вы действительно предпочитаете защиту простоте и эффективности.