objective-c - 在 Objective-C 中隐藏不可变接口(interface)背后的私有(private)可变属性

标签 objective-c properties immutability mutable

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

.h文件:

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

.m文件:

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

@implementation SomeClass
...
@end

最佳答案

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

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


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

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

关于objective-c - 在 Objective-C 中隐藏不可变接口(interface)背后的私有(private)可变属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18836623/

相关文章:

c# - 使用两个不同的公共(public)属性到 "get"具有不同返回类型的相同私有(private)变量

java - 如何在运行时从加载的 log4j 配置中获取特定值?

java - 如何限制对可变或不可变方法的访问?

javascript - 处理复杂的不可变对象(immutable对象)

objective-c - 从 TableView 中删除行

objective-c - SKView不显示?

objective-c - 为什么按钮在用户按下时看起来不同?

ios - 保持 uiview 突出显示(更改它的 alpha)直到另一个被点击

Javascript getter/setter 作用域访问

javascript - 当使用对象字面语法创建对象时,JavaScript 是否维护对现有变量的引用?