带"+"的类名

  • 本文关键字: objective-c xcode
  • 更新时间 :
  • 英文 :


我正在用 Xcode 做一个 iOS 项目,我看到一些类的名称带有"+";例如: TableViewController+TableView.h,然后类被命名为:@interface RKTableViewController (TableView)而不是RKTableViewController+TableView

这是什么+(TableView)?如果它的子类化UITableView该类不应该声明为:Subclassed name : Parent class name格式吗?

文件名中的 + 在语义上并不重要。将文件命名为"ClassName+CategoryName.h/m"只是命名包含类别的文件的流行约定。

@interface RKTableViewController (TableView)
@end

RKTableViewController类上声明一个名为"TableView"的类别。 类别用于向其主实现之外的类添加方法。请参阅此处有关类别的 Apple 文档:http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/chapters/occategories.html

这些是类别。有时非常有帮助。

可以通过在接口文件中声明方法来向类添加方法 在类别名称下并在实现文件中定义它们 同名。类别名称指示方法是 添加到在其他地方声明的类,而不是新类。你不能, 但是,使用类别将其他实例变量添加到 .class。

类别添加的方法将成为类类型的一部分。为 例如,包括添加到类别中的 NSArray 类的方法 作为编译器期望 NSArray 实例在其 剧目。但是,添加到子类中的 NSArray 类的方法 不包含在 NSArray 类型中。(这仅适用于 静态类型化对象,因为静态类型是唯一的方法 编译器可以知道对象的类。

类别方法可以执行类中定义的方法的任何操作 妥妥可以行。在运行时,没有区别。方法的 添加到类的类别由所有类的继承 子类,就像其他方法一样。

http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/chapters/occategories.html

例:

下面是我一直使用的类别示例。我没有NSMutableArray,但我希望有一个简单的移动功能。我不是仅仅为了添加一个简单的函数而进行子类化,而是附加了一个类别。

// NSMutableArray+Move.h
@interface NSMutableArray (move)
- (void)moveObjectFromIndex:(NSUInteger)from toIndex:(NSUInteger)to;
@end
// NSMutableArray+Move.m
@implementation NSMutableArray (move)
- (void)moveObjectFromIndex:(NSUInteger)from toIndex:(NSUInteger)to
{
    if (to != from) {
        id obj = [self objectAtIndex:from];
        [self removeObjectAtIndex:from];
        if (to >= [self count]) {
            [self addObject:obj];
        } else {
            [self insertObject:obj atIndex:to];
        }
    }
}

这允许我使用已在整个应用程序中创建的类来执行新操作。因此,在我使用 NSMutableArray 的任何地方,我都可以像这样调用我添加的方法

NSMutableArray *myArray = [NSMutableArray arrayWithObjects:@"Object A", @"Object B", @"Object C", nil];
[myArray moveObjectFromIndex:0 toIndex:2];

相关内容

  • 没有找到相关文章

最新更新