Objective-C - 在类中执行NSMutableArray操作但返回NSArray

时间:2011-11-23 15:13:16

标签: objective-c nsmutablearray nsarray

我很抱歉这个令人困惑的标题,但我说我的课程界面看起来像这样:

@interface Class : NSObject {

    NSArray *items;
}

@property (nonatomic, retain) NSArray *items;

@end

在实际操作中,我实际上想要使用NSMutableArray进行一些添加操作,然后使用该类的用户应该能够以NSArray的形式检索数据。

4 个答案:

答案 0 :(得分:3)

将可变数组声明为实例变量,将该属性声明为readonly NSArray并覆盖getter。

@interface SomeClass : NSObject {

    NSMutableArray *mutableItems;
}

@property (nonatomic, readonly) NSArray *items;

@end

@implementation SomeClass

- (NSArray *)items {
    return [NSArray arrayWithArray:mutableItems];
}

@end

答案 1 :(得分:1)

没有理由不从声明为返回NSArray的方法返回NSMutableArray。

答案 2 :(得分:1)

如果您不希望用户更改阵列,您可以这样做:

@interface Class : NSObject 
- (NSArray*) items;
@end

@implementation Class
{
   NSMutableArray *items;
}

// Allocate 'items' somewhere in your init method

- (NSArray*)items
{
  return items;
}

@end

答案 3 :(得分:0)

您可以简单地将变量定义为您希望的类型,而不是为您的实例变量定义属性:

@interface Class : NSObject {
    NSMutableArray *items;
}

并将其用作NSMutableArray

- (id)init {
    if ((self == [super init])) {
        items = [[NSMutableArray alloc] init]; // Don't forget to release me!
    } 
}

然后在您的界面中,定义一个返回NSArray方法:

- (NSArray *)items;

并按原样实施:

- (NSArray *)items {
    return [NSArray arrayWithArray:items];
}