数据隐藏和 Objective-C 合成器 [重复]
Posted
技术标签:
【中文标题】数据隐藏和 Objective-C 合成器 [重复]【英文标题】:Data Hiding and Objective-C synthesisers [duplicate] 【发布时间】:2013-03-25 12:06:00 【问题描述】:如果属性需要是私有的并且语言支持自动 getter/setter 方法创建,应该如何声明它们?
是根据需要覆盖自动创建的 getter 或 setter 的唯一方法吗?
【问题讨论】:
如果你需要私有唯一的方法是类扩展。 我不这么认为。私有属性可以在实现文件中声明。 怎么样?使用类别扩展使用类别?不是吗? 【参考方案1】:在 .m(实现)文件的顶部:
// Private category on your class, declared at top of implementation file.
@interface MyClass ()
@property (nonatomic, copy) NSString * privateString;
@end
@implementation
...
@end
这些“私有属性”仅在您的实现中可见。 请注意 ObjC 没有运行时访问限制的功能。如果需要,其他对象仍然可以调用您的私有 getter 和 setter(尽管这会产生编译器警告)。
【讨论】:
谢谢,是的,我知道这一点。我的问题更多是在设计层面上。如果说在头文件中声明属性是不好的设计,那么通过重写的 getter/setter 方法访问这些属性的唯一方法是什么? @Helium3:我不太明白。在头文件中声明(公共)属性有什么不好的设计?你到底想避免什么? 我想我所问的不适用于Objective-C,会将问题标记为删除。 @Helium3:不妨举个例子说明你的想法? @Helium3:现在你不能删除了,Ben 得票了。以上是关于数据隐藏和 Objective-C 合成器 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Objective-c:为啥在使用 KVC 时私有 ivars 不被外部访问隐藏
在代码中使用核心数据 - Objective-C/Cocoa