数据隐藏和 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

如何将json数据解码为objective-c中的数组[重复]

Objective-c 隐藏视图动画

ios - 通过代码Objective-c隐藏按钮时出错

Objective-C 播放声音