在Objective中为类定义私有方法的最佳方法
我刚刚开始编写Objective-C,并且拥有Java背景,不知道编写Objective-C程序的人是如何处理私有方法的。
我知道可能有几个约定和习惯,并将这个问题看作是人们在Objective-C中使用私有方法处理最佳技术的聚合器。
请在发布时提供参考。 为什么它好? 它有哪些缺点(你知道的)以及你如何处理它们?
至于我目前的发现。
可以使用MyClass.m文件中定义的类别[例如MyClass(Private)]来分组私有方法。
这种方法有两个问题:
第一个问题可以用空类别解决[例如MyClass()]。
第二个困扰我很多。 我希望在文件末尾附近实现(并定义)私有方法; 我不知道这是否可能。
正如其他人所说的那样,在Objective-C中没有像私人方法那样的东西。 但是,从Objective-C 2.0开始(意思是Mac OS X Leopard,iPhone OS 2.0及更高版本),您可以创建一个名为空的类别(即@interface MyClass ()
),称为类扩展。 类扩展的独特之处在于方法实现必须和公共方法一样在@implementation MyClass
中。 所以我构建我的类如下所示:
在.h文件中:
@interface MyClass {
// My Instance Variables
}
- (void)myPublicMethod;
@end
在.m文件中:
@interface MyClass()
- (void)myPrivateMethod;
@end
@implementation MyClass
- (void)myPublicMethod {
// Implementation goes here
}
- (void)myPrivateMethod {
// Implementation goes here
}
@end
我认为这种方法的最大优点是它允许你按功能分组你的方法实现,而不是(有时是任意的)公/私分类。
Objective-C中没有真正的“私有方法”,如果运行时可以计算出使用它的实现将执行它。 但这并不是说没有方法不属于记录界面的一部分。 对于这些方法,我认为一个类别是好的。 我并没有将@interface
放在.m文件的顶部,而是将它放在它自己的.h文件中。 我遵循的一个约定(我认为这是一个Apple惯例,因为Xcode现在给它提供了自动支持)是在它的类和类别之后命名一个文件,用+分隔它们,所以@interface GLObject (PrivateMethods)
可以在GLObject+PrivateMethods.h
找到。 提供头文件的原因是,你可以将它导入你的单元测试类:-)。
顺便说一下,就在.m文件结尾附近实现/定义方法而言,您可以通过在.m文件底部实现类别来实现该功能。
@implementation GLObject(PrivateMethods)
- (void)secretFeature;
@end
或者使用类扩展(你称之为“空类”),最后定义这些方法。 Objective-C方法可以在实现中以任何顺序定义和使用,所以没有什么可以阻止你将“私有”方法放在文件的末尾。
即使使用类扩展,我也会经常创建一个单独的头文件( GLObject+Extension.h
),以便我可以根据需要使用这些方法,模仿“朋友”或“受保护”可见性。
由于这个答案是最初编写的,所以clang编译器已经开始为Objective-C方法做两遍了。 这意味着您可以避免完全声明您的“私有”方法,以及它们是否位于编译器可以找到的调用站点之上或之下。
虽然我不是Objective-C的专家,但我个人只是在实施我的课程时定义了这个方法。 当然,它必须在任何调用它的方法之前(上面)定义,但它绝对只需要最少量的工作。
链接地址: http://www.djcxy.com/p/85145.html上一篇: Best way to define private methods for a class in Objective
下一篇: Best way to remove from NSMutableArray while iterating?