我正在看一些代码:
@interface ClassName (Private)
- (float)methodOne:(NSDictionary *)argOne;
- (void)methodTwo:(NSDictionary *)argTwo;
@end
@implementation ClassName
....
上面的代码位于ClassName.m文件的顶部,该文件似乎将该类的其他接口方法定义为私有?
为什么这样?有什么意义?还有什么可以去哪里(私人)?有人有这方面的文件吗?
由于
答案 0 :(得分:16)
这是一种保持类在内部使用的方法不会暴露给其他人的方法。这是封装的一部分。在Objective-C 2.0(iOS和Mac OS X 10.5+)中,在实现文件的顶部使用类扩展更为常见:
@interface ClassName ()
- (void)privateMethod;
@end
类扩展实际上只是一个类别的特例(这是你所问的)。主要区别在于,对于某个类别,即使您的@implementation不包含该类别中声明的方法的定义,编译器也不会抱怨。对于类扩展中的方法,您的类必须在其主@implementation块中实现这些方法,否则您将收到编译器警告。
最好在iOS代码中使用类扩展,或者至少使用Mac OS X 10.5 Leopard的Mac代码。
答案 1 :(得分:2)
基本上它是一个类别,允许在.m文件中添加方法。这些天最好的方法是使用类扩展,语法类似只是“私有”缺失,只有两个括号。
类扩展的另一个好处是,也可以包含属性,编译器将验证声明的所有方法都已定义。
一个非常方便的领域是能够在.h文件中声明一个正确的readonly并在.m文件中读取写入。这样,该类用户只具有读访问权限,但该类本身具有完全访问权限。
答案 2 :(得分:0)
objective-c不支持私有方法,你问的方式就是替换它。
您可以查看此链接以获取详细信息: Why doesn't Objective-C support private methods?