我很抱歉这个令人困惑的标题,但我说我的课程界面看起来像这样:
@interface Class : NSObject {
NSArray *items;
}
@property (nonatomic, retain) NSArray *items;
@end
在实际操作中,我实际上想要使用NSMutableArray
进行一些添加操作,然后使用该类的用户应该能够以NSArray
的形式检索数据。
答案 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];
}