gpt4 book ai didi

objective-c - 我如何扩展 NSArray?

转载 作者:可可西里 更新时间:2023-11-01 03:37:20 25 4
gpt4 key购买 nike

这是我的尝试:

H文件:

@interface Strings : NSArray
@end

M文件:

@implementation Strings
- (id) init
{
[self initWithObjects:
@"One.",
nil];
return self;
}
@end

当我运行时,我得到这个:

'NSInvalidArgumentException', reason: '* -[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 的私有(private)子类。 NSArray 类只是定义了一个接口(interface); NSArray 的子类提供接口(interface)的实现。

您可以编写自己的 NSArray 子类,但您必须为数组中的对象提供自己的存储空间。您必须自己初始化该存储。错误消息告诉您这一点,它说您需要覆盖子类中的 initWithObjects:count:。您的覆盖需要将对象放入您作为类实现的一部分分配的任何存储中。

可变参数 initWithObjects: 方法的 NSArray 实现只是 initWithObjects:count: 的包装器,所以你不必实现 initWithObjects:

关于objective-c - 我如何扩展 NSArray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8964547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com