我想在公共接口中保护对 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 的单个属性,而不需要任何额外的保护。
但是,如果您真的更喜欢保护而不是简单和高效,我也会选择最合适的答案。