objective-c – 如何声明@property但是阻止创建它的ivar?

objective-c – 如何声明@property但是阻止创建它的ivar?,第1张

概述我有A类,它暴露了一种获取和设置Foo类型对象的方法.用属性的说法,我通常在界面中声明: @property (nonatomic, strong) Foo * foo; 这(在现代的ObjC中)生成访问器和ivar,_foo用于存储. 如果我想在访问器中进行自定义工作,我可以自己实现其中一个或两个.但是,如果我不仅想做定制工作,我实际上不想要ivar?换句话说,我正在使用Foo对象做其他事情,比 我有A类,它暴露了一种获取和设置Foo类型对象的方法.用属性的说法,我通常在界面中声明:

@property (nonatomic,strong) Foo * foo;

这(在现代的ObjC中)生成访问器和ivar,_foo用于存储.

如果我想在访问器中进行自定义工作,我可以自己实现其中一个或两个.但是,如果我不仅想做定制工作,我实际上不想要ivar?换句话说,我正在使用Foo对象做其他事情,比如将它来回交给我组成的另一个内部对象.实际上我根本不需要在A的实例中保存foo的存储空间.

看起来我有两个选择:

>声明属性,实现两个访问器,并简单地忽略编译器为_foo创建存储的事实,并且永远不会使用它.
>明确地声明我的访问器: – (Foo *)foo和 – (voID)setFoo:(Foo *)foo在界面中,就像我以前在现代的ObjC中一样.

第一个在运行时看起来不那么优雅,而第二个在声明中看起来不那么优雅(我现在可能会混合使用属性和类似属性的访问器).

有没有办法申报一个财产,并将其作为纯粹的声明?

解决方法 如果同时覆盖setter和getter并且不使用setter和getter中的变量,则不会创建变量.

例如,如果你有一个你想要firstname和lastname属性的类,但也可能是fullname属性的setter和getter,如果你的fullname setter只是将字符串解析为firstname和lastname并将这些属性设置为(和永远不会将完整的字符串存储到fullname变量中,并且您的fullname getter只返回连接的firstname lastname,并且永远不会使用fullname变量,永远不会创建一个.

这是根据Apple的官方文档. Scroll down to “You Can Implement Custom Accessor Methods”

总结

以上是内存溢出为你收集整理的objective-c – 如何声明@property但是阻止创建它的ivar?全部内容,希望文章能够帮你解决objective-c – 如何声明@property但是阻止创建它的ivar?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1021590.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存