nod*_*nja 20 methods cocoa-touch subclass objective-c nsmutablearray
我有一个NSMutableArray对象,我想添加自定义方法.我尝试了子类化NSMutableArray但是当我尝试使用count方法获取对象数时,我得到一个错误,说"只为抽象类定义了方法".为什么count方法不会被继承?
我在其他地方读到如果我想使用它们,我必须将一些NSMutableArray方法导入我的自定义类.我只想为NSMutableArray类添加一个自定义方法.我应该将NSMutableArray子类化,还是应该做其他事情?
Pey*_*loW 32
NSMutableArray它不是一个具体的类,它只是类集群的抽象超类.该文档NSMutableArray确实有关于如何子类的信息,但强烈建议你不要!如果您特别需要实际存储,则只能进行子类化.
甲类簇意味着实际类将在运行时进行选择.创建为空的数组可能不会使用与使用1000个项目创建的数组相同的类.运行时可以明智地选择要使用的实现.在实践NSMutableArray中将是一个桥梁CFArray.没有什么需要担心的,但如果你在调试器中检查数组的类型,你可能会看到它,你将永远不会看到NSArray,但经常NSCFArray.
如前所述,子类化与扩展类不同.Objective-C具有类别的概念.类别与其他编程语言称为混合类似.
例如,如果您想要一个方便的方法NSMutableArray来对属性上的所有成员进行排序,那么在.h文件中定义类别接口,如下所示:
@interface NSMutableArray (CWFirstnameSort)
-(void)sortObjectsByProperty:(NSString*)propertyName;
@end
Run Code Online (Sandbox Code Playgroud)
实施将是:
@implementation NSMutableArray (CWFirstnameSort)
-(void)sortObjectsByProperty:(NSString*)propertyName;
{
NSSortDescriptor* sortDesc = [NSSortDescriptor sortDescriptorWithKey:propertName ascending:YES];
[self sortUsingDescriptors:[NSArray arrayWithObject:sortDesc]];
}
@end
Run Code Online (Sandbox Code Playgroud)
然后将它简单地用作:
[people sortObjectsByProperty:@"firstName"];
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您只是添加自定义方法,请使用类别NSMutableArray.它是一个类集群,因此实现由未记录的子类提供.您需要提供一些方法来生成自己的子类.但是,如果您只是添加一个类别,那么您的自定义方法将适用于您应用中的所有内容 NSMutableArrays.
为了比较,这是我在实现自定义NSMutableArray子类时写的一个例子.
| 归档时间: |
|
| 查看次数: |
8443 次 |
| 最近记录: |