Искам да защитя достъпа до 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 без допълнителна желана защита.
Но също така ще избера най-подходящия отговор, който може да помогне, ако наистина предпочитате защитата пред простотата и ефективността.