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

Web*_*ode 2 objective-c ios objective-c-category

在我的*.h文件中,我有foo一个readonly属性.
我通过使用更新该属性赢得一些其他公共方法_foo = _foo + 1;

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

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

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

问题
如何解决?
也可以从类外部将属性设置为只读,但是从类和类别中读取是否可以?
那样可以解决这个问题.

Dro*_*ppy 5

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

@interface MyClass : NSObject
{
    int _foo;
}
@property (readonly) int foo;
@end
Run Code Online (Sandbox Code Playgroud)

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

@implementation MyClass
@synthesize foo = _foo;
...
@end
Run Code Online (Sandbox Code Playgroud)

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

@implementation MyClassCategory

- (void)someMethod
{
    _foo++;
}
Run Code Online (Sandbox Code Playgroud)