2012-02-01 70 views
10

我一直在寻找一些代码:何时以及为什么要使用@interface ClassName(Private)? - Objective-C的

@interface ClassName (Private) 

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

@end 

@implementation ClassName 
.... 

上面的代码是在ClassName.m文件的顶部出现定义为类私有附加接口的方法呢?

为什么这样做?有什么意义?还有什么可以去哪里(私人)?任何人都有关于此的文档?

感谢

回答

16

这是保持该类暴露于他人在内部使用方法的一种方式。这是封装的一部分。在Objective-C 2.0(的iOS和Mac OS X 10.5以上版本),这是比较常见的实现文件的顶部使用类扩展:

@interface ClassName() 

- (void)privateMethod; 

@end 

一类扩展确实是一个类别的一个特例(这是你问到的)。主要区别在于,对于类别,即使您的@implementation不包含在类别中声明的方法的定义,编译器也不会抱怨。对于类扩展中的方法,您的类必须在其主@implementation块中实现这些方法,否则会得到编译器警告。

你最好在iOS代码或Mac代码中至少使用Mac OS X 10.5 Leopard的类扩展。

+0

基本上, '@interface类名(私人)' 折旧 '@interface类名()' 的形式。正确吗? – WebOrCode 2014-06-01 09:38:42

+1

@WebOrCode,你可以说,虽然这不是正式弃用,毕竟是一个简单的公约,并使用更广泛适用ObjC功能(种)。使用'(私有)'意味着你正在声明一个* named *类别,但这并不被弃用。这只是它们用于声明已被类扩展取代的“私有”属性的一种方式。 – 2014-06-01 19:42:59

2

基本上它是一种类别,允许添加在.m文件的方法。现在最好的方法是使用类扩展,语法类似,只是缺少“私有”,只有两个括号。

类扩展的另外一个好处是属性也可以被包含,并且编译器会验证声明的所有方法都被定义了。

其中一个非常方便的地方是能够在.h文件中正确声明一个正确的只读文件,并在.m文件中读写。这样,该类的用户只能读取访问权限,但该类本身具有完全访问权限。

相关问题