我有类A
,它公开了一种获取和设置类型对象的方法Foo
。用属性的说法,我通常在接口中声明:
@property (nonatomic, strong) Foo * foo;
这(在现代 ObjC 中)生成访问器和 ivar,_foo
用于存储。
如果我想在访问器中进行自定义工作,我可以自己实现其中一个或两个。但是如果我不仅想做定制工作,我实际上不想要 ivar 怎么办?换句话说,我正在用 Foo 对象做其他事情,比如将它来回传递给我组成的另一个内部对象。foo
我实际上根本不需要保留存储空间A
。
看来我有两个选择:
- 声明该属性,实现两个访问器,并忽略编译器为 创建存储的事实
_foo
,并且永远不要使用它。 - 明确声明我的访问器:
- (Foo *)foo
在- (void)setFoo:(Foo *)foo
界面中,就像我在前现代 ObjC 中使用的那样。
第一个在运行时似乎不优雅,第二个在声明中似乎不优雅(我现在可能混合了属性和类似属性的访问器)。
有没有办法声明一个属性并将其作为纯粹的声明?