【发布时间】:2014-03-24 22:18:04
【问题描述】:
在 Objective-C 中创建 ivar 时,默认可见性是“受保护”,这意味着可以从子类访问 ivar。 (如果它在标题中声明)。
因此这段代码:
@interface MagicCarpet : NSObject
{
@protected
NSString* _threadCount;
}
与此相同:
@interface MagicCarpet : NSObject
{
NSString* _threadCount;
}
显然,还有一个“包”级别的可见性。我经常看到和使用“公共”、“私人”和“受保护”的可见性。 . .从未见过任何带有“包”的代码。它有什么作用?
【问题讨论】:
-
没有。你不能“经常看到和使用‘公共’、‘私人’和‘受保护’的可见性”。因为 ivar 根本不应该在 .h 文件中(除非用于遗留代码)。使用公共 ivar 的属性,在 .m 文件中隐藏私有,尽可能避免受保护。
-
@BryanChen 我同意遵守现代 Objc 约定 - 这样就不会对 KVO 等感到意外。但问题的重点是关于“包”可见性的作用。
标签: objective-c