我在头文件中声明了一个类属性;
@property (readonly) NSArray *pages
我希望公开展示的方式如此。但在内部,我将把它分配为NSMutableArray,以便添加/删除其中的内容。 但要做到这一点,我每次都必须进行类型转换。 有更好的方法吗? 谢谢。
我在头文件中声明了一个类属性;
@property (readonly) NSArray *pages
我希望公开展示的方式如此。但在内部,我将把它分配为NSMutableArray,以便添加/删除其中的内容。 但要做到这一点,我每次都必须进行类型转换。 有更好的方法吗? 谢谢。
你的做法真的很糟糕。如果你坚持使用带有动态内容的可变数组,请修改你的getter方法返回一个不可变的拷贝,否则在快速枚举期间进行变更操作会导致奇怪的副作用和异常。
这个问题目前还没有解决方案。你需要每次都进行转换,或使用不同的属性。下面是第二种方法的示例:
@interface MyClass : NSObject
@property (nonatomic, strong, readonly) NSArray *pages;
-(void)addObject:(id)obj;
@end
@interface MyClass()
@property (nonatomic, strong, readwrite) NSMutableArray *mPages;
@end
@implementation MyClass
-(id) init {
self = [super init]
if (self){
_mPages = [NSMutableArray array];
}
return self;
}
-(NSArray*)pages {
return [NSArray arrayWithArray:self.mPages];
}
-(void)addObject:(id)obj {
[self.mPages addObject:obj];
}
@end
int main(int argc, char *argv[]) {
@autoreleasepool {
MyClass *m = [MyClass new];
[m addObject:@"x"]; // the collection is mutable
NSLog(@"%@",[m pages]); // but only accessible as an immutable copy
}
}
@interface MyClass : NSObject
@property (nonatomic, strong, readonly) NSArray *pages;
@end
@interface MyClass()
@property (nonatomic, strong, readwrite) NSMutableArray *pages;
@end
这允许你设置变量,但不能将其用作与接口中声明的不同类。换句话说,它强制你在每次使用时进行转换:
[(NSMutableArray*)pages addObject:@"x"];
addObject:
方法?你试过了吗? - sunkehappy