我在使用ios6 beta 3 时注意到了这一点

当我创建UIViewCONTOLLER的新子类(没有其他父类生成我注意到的此行为)时,.m文件现在在文件顶部有一个空类别。在过去时,学习类别时,我注意到有些人将使用这种相同的技术来指示私人方法(虽然不是真正的私人)。

是意图在这里?现在有没有变化来制造实际私密?我注意到@private也指令。

您的私人var和方法的人编码风格是什么?

更新:由于Xcode推动我们使用类扩展,因此我继续使用它们进行私有方法/ IVAR进行此项目。我发现了一个缺点。我看到我可以重用我的一个子类UIViewControllers以及所有的UIBUTONS,UILOBELS等......我遗产了: UIViewController < - FirstViewController < - 第二viewController。 嗯,我在第一个viewController中的代码时,我输入的所有私有方法都不会在AutoComplete中弹出。轻微的烦恼....

有帮助吗?

解决方案

您指的是此界面定义:

@interface MYViewController ()
@end
.

这是技术上是一个类扩展而不是类别。类别在括号内有一个字符串。在编译时将类扩展添加到类中,因此可以添加IVAR(通常以属性的形式)。类别在运行时添加,无法添加IVAR。

所有所说的,你的观点是正确的。这用于定义私有方法和属性。 在OBJC世界中,“私人”是一个“不擅词”标志,而不是剃刀线墙。虽然有一个@private关键字(它添加编译器强制执行),但它只适用于IVAR,并且通常不需要。这种基于警告的隐私在objc中非常好,并且是足够的。

如果他们尝试访问它们,则在此类扩展名中将您的私有属性置于此类扩展中,并且在外部呼叫者将“可能不会响应选择器”警告(就像他们将呼叫任何未定义的方法一样)。您不应该在OBJC项目中允许警告存在,因此这会强制执行数据封装。


编辑

如果它们是私有的,那么它们不应该弹出你的子类。你想要的是受到保护的。在objc中没有出现保护方法的伟大方案,但是一个常见的技术是将它们放入一个类别中的一个类别,如MyViewController +受保护。我发现这很少在实践中非常很少,因为很多好的Objc设计都没有子类。它使用组成和委派。

关于“为什么只查看控制器。”首先,这不仅仅是查看控制器。它只是iOS上查看控制器(井,VC,TableViewController和GlkViewController)。在Mac上,它也是窗口控制器和聚光灯进口商。看:

.../Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates
.../Library/Xcode/Templates
.

但为什么那些?嗯,这些都是控制器,对于需要私有物业来说,这是毫无奇怪的常见。实际上,如果您在控制器中没有私有物业,您可能会制作太多的公众。这不是模型和观看课程的普遍性。我怀疑他们的决定。它也可能还有不同的人拥有模板,或者他们在不同的时间更新。有时你会看到随着时间的推移顺利的不一致。

您也可以制作自己的模板。请参阅创建自定义Xcode 4文件模板

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top