所以,我基本上想问的是下面的代码是否安全(不是它是否有效,因为它确实如此)。即,公共getter是否会覆盖actionLog属性的合成getter [属于不同类型]?
.h文件:
@interface SomeClass : NSObject
- (NSArray*) actionLog;
@end
.m文件:
@interface SomeClass ()
@property (strong, nonatomic) NSMutableArray* actionLog;
@end
@implementation SomeClass
...
@end
答案 0 :(得分:5)
这不仅可以,这正是为什么首先要创建类扩展的原因!
是的,会有一个自动合成的ivar和一对getter / setter方法按预期生成。
抱歉 - 错过了NSArray
与NSMutableArray
部分的对比。不,你做不到;类型必须相同。
然而,你不想再返回你的可变数组。首先,调用者可能修改它(一个bug)。但是,更重要的是,调用者将假设内容是不可变的,如API所暗示的那样,因此,当该数组的内容从调用者下面更改时,它可能会导致问题(例如;调用者可以合理地假设结果为count
将保持稳定且可以缓存。
答案 1 :(得分:1)
用可变的ivar支持该属性,如下所示:
.h文件:
@interface SomeClass : NSObject
@property (nonatomic, strong) NSArray *actionLog;
@end
.m文件:
@implementation SomeClass{
NSMutableArray* _actionLog;
}
-(void)insertAction:(Action *)action{
if(!_actionLog){
_actionLog = [[NSMutableArray alloc] init];
}
[_actionLog addObject:action];
}
@end