8

所以,我基本上想问的是下面的代码是否安全(不是它是否有效,因为它确实有效)。即,公共 getter 是否会覆盖 actionLog 属性的合成 getter [这是不同类型的]?

.h 文件:

@interface SomeClass : NSObject
- (NSArray*) actionLog;
@end

.m 文件:

@interface SomeClass ()
@property (strong, nonatomic) NSMutableArray* actionLog;
@end

@implementation SomeClass
...
@end
4

2 回答 2

5

这不仅没问题,这正是首先创建类扩展的原因!

是的,将按预期生成一个自动合成的 ivar 和一对 getter/setter 方法。


抱歉——错过了NSArrayvs.NSMutableArray部分。不,你不能那样做;类型必须相同。

但是,无论如何您都不想返回可变数组。首先,调用者可能会修改它(一个错误)。但是,更重要的是,调用者将假定 API 所暗示的内容是不可变的),因此,当该数组的内容从调用者下方更改时,可能会导致问题(例如;调用者可以合理地假设结果count将是稳定的并且可以被缓存)。

于 2013-09-16T21:11:15.800 回答
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
于 2017-01-08T22:56:01.593 回答