当&为什么使用@interface ClassName(Private)? - 目标-C

时间:2012-02-01 20:31:12

标签: objective-c ios

我正在看一些代码:

@interface ClassName (Private)

- (float)methodOne:(NSDictionary *)argOne;
- (void)methodTwo:(NSDictionary *)argTwo;

@end

@implementation ClassName
....

上面的代码位于ClassName.m文件的顶部,该文件似乎将该类的其他接口方法定义为私有?

为什么这样?有什么意义?还有什么可以去哪里(私人)?有人有这方面的文件吗?

由于

3 个答案:

答案 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?