这是我的尝试:
H文件:
@interface Strings : NSArray @end
M文件:
@implementation Strings - (id) init { [self initWithObjects: @"One.",nil]; return self; } @end
我跑的时候得到这个:
‘NSInvalidArgumentException’,原因:’* – [NSArray initWithObjects:count:]:仅为抽象类定义的方法.定义 – [Strings initWithObjects:count:]!’
这就是我所做的:
H文件:
@interface Strings : NSObject + (NSArray*) getStrings; @end
M文件:
@implementation Strings + (NSArray*) getStrings { NSArray* strings = [[NSArray alloc] initWithObjects: @"One.",nil]; return strings; } @end
解决方法
NSArray是一个
class cluster (link to Apple’s documentation).这意味着当您尝试创建NSArray时,系统会创建一些NSArray的私有子类. NSArray类只定义了一个接口; NSArray的子类提供接口的实现.
您可以编写自己的NSArray子类,但必须为数组中的对象提供自己的存储.您必须自己初始化该存储.错误消息通过说您需要在子类中覆盖initWithObjects:count:来告诉您这一点.您的覆盖需要将对象放入您作为类实现的一部分分配的任何存储中.
可变参数initWithObjects:方法的NSArray实现只是initWithObjects:count:的包装器,因此您不必实现initWithObjects:.