我看到一些我继承的代码如下所示:
@interface SomeClass (private)
这是在SomeClass.m
实现文件中.有一个附带的头文件,不建议该类使用类别.是(private)
在这种情况下只是一个可怜的名字给一个类别SomeClass
?我假设在实现中指定类似这些类别是完全合法的吗?
它不是私有的名称"私人"; 这些方法是私有的,因为它们属于在实现文件中声明的类别.
类别有三种用法,每种用法都向类添加方法(注意:仅限方法,而不是iVars)
扩展现有的Cocoa类
这允许您将自己的方法添加到现有类.例如,如果要扩展NSString以应用特殊大小写,则可以创建一个名为NSString + Capitals的新类.在NSString + Capitals.h中你会得到:
@interface NSString (Capitals) -(NSString *)alternateCaps:(NSString *)aString; @end
在NSString + Capitals.m中,您将实现该方法
@implementation NSString (Capitals) -(NSString *)alternateCaps:(NSString *)aString { // Implementation }
类上的私有方法
这与上面相同,只是在实现文件中声明和定义了额外的方法(.m)通常是一种拥有私有方法的方法 - 因为它们不在.h文件中(这是其他#imported)他们根本不可见.在这种情况下,方法的实现在它们自己的实现块中完成.例如
// someClass.m @interface someClass (extension) -(void)extend; @end @implementation someClass // all the methods declared in the .h file and any superclass // overrides in this block @end @implementation someClass (extension) -(void)extend { // implement private method here; }
类扩展(10.5 Leopard的新功能)
一种更简单的私有方法.在这种特殊情况下,类别名称为空,并且私有方法在与所有其他类方法相同的块中实现.
// someClass.m @interface someClass () -(void)extend; @end @implementation someClass // all the methods declared in the .h file and any superclass // overrides in this block // Implement private methods in this block as well. -(void)extend { // implement private method here; } @end
这是Apple类别和扩展文档的链接.