objective-c - 我应该继承 NSMutableArray 类吗

标签 objective-c cocoa-touch methods nsmutablearray subclass

我有一个 NSMutableArray 对象,我想向其添加自定义方法。我尝试对 NSMutableArray 进行子类化,但在尝试使用 count 方法获取对象数量时,我收到一条错误消息,提示“方法仅为抽象类定义”。为什么不继承count方法?

我在其他地方读到,如果我想使用它们,我必须将一些 NSMutableArray 方法导入到我的自定义类中。我只想向 NSMutableArray 类添加一个自定义方法。那么我应该将 NSMutableArray 子类化,还是应该做其他事情?

最佳答案

NSMutableArray 不是一个具体的类,它只是一个类簇的抽象父类(super class)。 NSMutableArray 的文档确实包含有关如何子类化的信息,但也强烈建议您不要这样做!只有在您对实际存储有特殊需求时才进行子类化。

类集群 意味着将在运行时选择实际的类。创建的空数组不能使用与使用 1000 项创建的数组相同的类。运行时可以明智地选择要为您使用的实现。在实践中 NSMutableArray 将是桥接的 CFArray。无需担心,但如果您在调试器中检查数组的类型,您可能会看到它,您永远不会看到 NSArray,但经常会看到 NSCFArray

如前所述,子类化与扩展类不同。 Objective-C 有类别 的概念。类别类似于其他编程语言所说的混合。

例如,如果您想要 NSMutableArray 上的便捷方法对属性上的所有成员进行排序,那么在 .h 文件中定义类别接口(interface)如下:

@interface NSMutableArray (CWFirstnameSort)
-(void)sortObjectsByProperty:(NSString*)propertyName;
@end

实现将是:

@implementation NSMutableArray (CWFirstnameSort)
-(void)sortObjectsByProperty:(NSString*)propertyName;
{
    NSSortDescriptor* sortDesc = [NSSortDescriptor sortDescriptorWithKey:propertName ascending:YES];
    [self sortUsingDescriptors:[NSArray arrayWithObject:sortDesc]];
}
@end

然后简单地使用它:

[people sortObjectsByProperty:@"firstName"];

关于objective-c - 我应该继承 NSMutableArray 类吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3862619/

相关文章:

objective-c - 关于 objective-C 和 cocoa/cocoa-touch 的实现的良好知识/信息来源是什么?

iphone - AVCaptureSession 之前应为 "("

objective-c - iOS 上的 Autocad 格式查看器

objective-c - 将数学方程的 NSString 转换为值

在方法上使用三元运算符的 Java 递归

java - 构造函数不工作,稍后调用时不接受参数?

java - 通过调用另一个类中引用另一个方法的方法来打印排序数组 Java Eclipse

objective-c - 对象数 (0) 与键数 (1) 不同

ios - 如何在 iOS 中创建类似 UIActionSheet 背景 View 的 View ?

cocoa-touch - 哪个事件处理对象成为/失去第一响应者状态?