在Objective-C属性中,仅当变体保持私有时才公开访问器
假设我有一个带有一些实例变量的类,我想通过点表示法属性公开这些i-vars,以便“只读”使用,但同时能够使用类内的属性Mutator,也可以使用点表示法 问题是,我在.h文件中声明如下:在Objective-C属性中,仅当变体保持私有时才公开访问器,objective-c,properties,encapsulation,accessor,mutators,Objective C,Properties,Encapsulation,Accessor,Mutators,假设我有一个带有一些实例变量的类,我想通过点表示法属性公开这些i-vars,以便“只读”使用,但同时能够使用类内的属性Mutator,也可以使用点表示法 问题是,我在.h文件中声明如下: @property (readonly) .... @inteface MyClass() @property (retain) myIvar; @end 然后,即使我自己编写mutator(-(void)setMyIvar:),我也不能将它与点符号一起使用,因为编译器(正确地)抱怨该属性是只读的 我尝试在
@property (readonly) ....
@inteface MyClass()
@property (retain) myIvar;
@end
然后,即使我自己编写mutator(-(void)setMyIvar:
),我也不能将它与点符号一起使用,因为编译器(正确地)抱怨该属性是只读的
我尝试在我的.m文件(在接口扩展名内)中重新声明属性,如下所示:
@property (readonly) ....
@inteface MyClass()
@property (retain) myIvar;
@end
但是编译器不接受这个双重声明
我有什么办法可以做到吗?你可以这样做,但你必须这样做:
@property (retain,readonly) ....
在您的实施中:
@inteface MyClass()
@property (retain,readwrite) myIvar;
@end
换句话说,除了可访问性之外,声明应该是相同的。这是一个很好的答案!我从未意识到属性的可访问性和属性的“属性”之间存在分离。