为什么我需要在objective-c中使用@property关键字?

use*_*776 4 objective-c

假设我的课上有以下公共方法:

- (BOOL)finished
{
    return _finished;
}
- (void)setFinished:(BOOL)aValue
{
    _finished = aValue;
}
Run Code Online (Sandbox Code Playgroud)

我是否还需要在课程中将finish设置为属性:

@property SomeClass *finished;
Run Code Online (Sandbox Code Playgroud)

我可能误会了@property,但对我而言,似乎我在重复自己.

  • 应该声明两种方法和一种@property或只是其中一种?

A O*_*A O 6

通过声明a @property,LLVM编译器将自动"合成"您的访问器方法(getter和setter),以及一个实例变量(ivar),由下划线前缀表示(_finished例如)

在你的情况下,因为你没有对你的访问者做任何特殊的事情(你只是直接阅读/写入支持ivar),只需声明一个@property会做的伎俩.您不需要编写-finished-setFinished方法

如果你没有申报@property,你必须申报ivar

@property还表示您正在使用对象的成员变量,并且正如用户@Sulthan在注释中所说,每个类都包含@properties可以搜索的列表

同一个用户的另一个好处是@property制作访问器方法atomic,以防止ivar在编写时被读取