如何在objective-c中更改类别中的只读属性

时间:2014-08-02 18:11:04

标签: ios objective-c objective-c-category

在我的* .h文件中,我有foo属性,只读 我使用_foo = _foo + 1;

更新该属性赢得其他一些公共方法

现在我在* .h文件上有类别。
我需要从类别更新foo属性。

如果我使用_foo,那么我得到Use of undeclared identifier '_foo''
如果我使用self.foo = 5,那么我得到Assignment to readonly property

我知道我可以通过将foo属性设置为readwrite来解决此问题,但我想避免这种情况。

问题
怎么解决?
也可以从类外部将属性设置为只读,但是可以从类和类别中读取?
 这样可以解决这个问题。

1 个答案:

答案 0 :(得分:5)

您也可以在头文件中声明属性的支持实例变量,因此编译器可以在类别中看到它:

@interface MyClass : NSObject
{
    int _foo;
}
@property (readonly) int foo;
@end

明确声明此变量将用于支持该属性(仅用于安全性):

@implementation MyClass
@synthesize foo = _foo;
...
@end

然后在类别中引用_foo应该可以正常工作:

@implementation MyClassCategory

- (void)someMethod
{
    _foo++;
}