在Singleton类中实现'release'时返回类型上的分布式对象修饰符冲突

时间:2011-09-27 07:55:00

标签: iphone objective-c xcode4.2

我最近升级到Xcode 4.2,它开始用我的代码给我这么多语义警告...

其中一个是“在我的单例类中实现'release'时返回类型上的分布式对象修饰符冲突”..

我读到某处 - (单向无效)发布;发布此警告,但一旦我把它放在我的代码中我开始得到编译错误为“重复发布声明”不知道为什么,如果你试图找到它在这一行显示的第二个声明

SYNTHESIZE_SINGLETON_FOR_CLASS(GlobalClass);

更新:这是post,它解释了 - (单向无效)发布;

如何摆脱此警告“在发布实现中返回类型上的分布式对象修饰符冲突”?为什么会发生?

1 个答案:

答案 0 :(得分:50)

您链接的帖子包含标题中问题的解决方案,并解释了您遇到的原因。

但是,从阅读您的问题看来,您的新问题似乎是由于错误地应用了该帖子的答案中的好建议。我很确定你添加了

- (oneway void) release {}
在.m文件中

而不是修改现有的

- (void) release {

与额外的单词“oneway”对齐。

这就是您获得“重复发布声明”的原因。是的,这很令人困惑,因为它是一个重复的定义,无形中创建了重复声明。但我只是尝试以错误的方式做到这一点,而且我得到了“重复声明”的消息。

我得到的印象可能是错误的,你没有意识到你实际上有一个发布方法,特别是当你认为添加该行将“发布此警告”时。

不要过于字面地理解所有错误,并且总是试着去思考一个人可能真正意味着什么,因为它通常与他们说的不同,但是尝试理解代码中的内容,即使在你已经上过的课程中也是如此现成的。

为了解决其他提出的问题,你推迟发布的原因是因为它是一个通常不会发布的单身人士。您可能只在代码中有一个定义,这就足够了。

Jonathan Grynspan关于在声明和定义上指定的内容广泛有效(实际上是问题的根源)但重要的是要认识到在这个特定情况下,声明是由Apple的基础代码提供的改变。

所以,如果还不清楚,修改XCode发现问题的行,以包含单词