我使用以下内容来公开语言数组。
@property(nonatomic,readonly)NSArray *languages;
在ARC之前分配语言是这样的:
languages=[[NSArray arrayWithObjects:
[[Language alloc]initWithCode:@"es"],
[[Language alloc]initWithCode:@"en"],
nil] retain];
所以,我既能保留这个物体,又能将它标记为外部的读物。
使用ARC, 因为我无法手动输入“保留”。如何在不超越setter和getter的情况下做到这一点?有没有办法标记一个属性readonly(to outside)和retain(to inside)for ARC?
答案 0 :(得分:3)
retain
*和readonly
实际上彼此无关。 readonly
表示该属性只有一个getter,而不是一个setter。 retain
表示该类维护对该属性引用的对象的保留(强)引用,并且在ARC下,假设该属性由基础合成实例变量支持,则表示该实例变量为{{ 1}}变量。
如果您想要一个对外界只读的属性,但可以在类中读取和写入,则可以在实现(.m)的类扩展中将该属性重新声明为__strong
文件。在标题中:
readwrite
然后,在.m的顶部:
@property (nonatomic, strong, readonly) NSArray *languages;
在类的实现中,您现在可以使用@interface YourClass ()
@property (nonatomic, strong, readwrite) NSArray *languages;
@end
,(或初始化程序中的self.languages = ...;
)来设置languages属性。在ARC与非ARC之间,这实际上并没有什么不同......
*在ARC下,使用_languages = ...;
代替strong
更为习惯,但编译器会以同样的方式对待它们。