首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我如何声明一个@属性,但却不能创建它?

我如何声明一个@属性,但却不能创建它?
EN

Stack Overflow用户
提问于 2013-10-27 15:54:35
回答 3查看 809关注 0票数 8

我有类A,它公开了获取和设置Foo类型对象的方法。在属性术语中,我通常在接口中声明这一点:

代码语言:javascript
运行
AI代码解释
复制
@property (nonatomic, strong) Foo * foo;

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

如果我想在访问器中执行自定义工作,我可以自己实现其中的一个或两个。但是,如果我不仅想做定制的工作,实际上我不想要象牙?换句话说,我正在对Foo对象执行其他操作,比如将它来回传递给另一个由我组成的内部对象。实际上,我根本不需要在foo实例中为A保留存储。

我似乎有两个选择:

  1. 声明属性,实现两个访问器,忽略编译器为_foo创建存储的事实,而从不使用它。
  2. 在接口中显式声明我的访问器:- (Foo *)foo- (void)setFoo:(Foo *)foo,就像我在前现代ObjC中所做的那样。

第一个在运行时看起来不优雅,而第二个在声明中似乎不优雅(在声明中,我可能已经将属性和类似属性的访问器混合在一起了)。

是否有一种方法来申报一项财产,并使其成为纯粹的申报?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-27 16:02:24

如果覆盖setter和getter,并且不使用setter和getter中的变量,则不会创建变量。

例如,如果您的类需要一个firstNamelastName属性,但也可能是fullName属性的settergetter,那么如果您的fullName setter只是将字符串解析为firstNamelastName,并将这些属性设置为firstNamelastName(并且从不将完整字符串存储到fullName变量中),并且您的d9 getter简单地d10连接的firstName + lastName,并且从不使用d13变量,那么就永远不会创建一个。

这是根据苹果的官方文件。向下滚动到“您可以实现自定义访问器方法”

票数 5
EN

Stack Overflow用户

发布于 2013-10-27 15:55:32

在实现文件中使用@dynamic关键字。通常对@dynamic的讨论将其描述为在编译时没有创建访问器。通常没有提到的是,也具有不为属性创建存储的效果,在这种情况下,这正是所希望的。

代码语言:javascript
运行
AI代码解释
复制
@implementation A
@dynamic foo;

- (Foo *)foo 
{
   // get a Foo from somewhere and return it.
}

- (void)setFoo:(Foo *)foo
{
   // do something with foo
}

@end

(注:我在写问题时发现了这个问题,就回答了我自己的问题,这似乎既有趣又不明显。)

票数 9
EN

Stack Overflow用户

发布于 2013-10-27 16:08:22

@dynamic可能是该走的路。

但是,还有两种方法可以做到这一点:

  1. 未实现的类别 可以使用未实现的类别来声明属性,但不能获得备份存储: @interface : NSObject @end @interface (UnimplementedProperties) @property (强) id bar;@end @implementation @end 不声明类别(@implementation Foo (UnimplementedProperties))的实现,就不会合成属性。
  2. 一项议定书 您可以在协议上声明属性,然后使类符合该协议。这与未实现的类别具有相同的效果:方法是声明的,但属性不是合成的。 @protocol FooProperties @property (强) id bar;@end @interface : NSObject @end
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19625162

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文