我想保护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的单个属性,没有任何额外的所需保护。
但如果您确实更喜欢保护而不是简洁和效率,则我还将选择最合适的答案,这可能会有所帮助。