28

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

其中之一是在我的单例类中“在实现‘释放’时,返回类型上的分布式对象修饰符冲突”。

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

SYNTHESIZE_SINGLETON_FOR_CLASS(GlobalClass);

更新:这是 它解释的帖子- (oneway void)release;

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

4

1 回答 1

50

您链接到的帖子包含标题中问题的解决方案,并解释了它发生在您身上的原因。

但是,从阅读您的问题来看,您的新问题似乎是由于误用了该帖子答案中的重要建议而引起的。我相当肯定你添加了这条线

- (oneway void) release {}

在您的 .m 文件中,而不是修改您现有的

- (void) release {

与额外的单词“oneway”一致。

这就是为什么您会收到“重复的发布声明”。是的,这很令人困惑,因为它是一个重复的定义,它在无形中创建了重复的声明。但是我刚刚尝试以错误的方式进行操作,并且收到了“重复声明”消息。

我得到的印象,也许是错误的,你没有意识到你实际上有一个 release 方法,特别是当你认为添加该行会“释放这个警告”时。

不要太从字面上理解所有错误,并始终尝试思考某人可能真正的意思,因为它通常与他们所说的不同,但请尝试理解代码中的内容,即使是在你已经下架的类中.

为了解决提出的其他问题,您覆盖发布的原因是因为它是一个通常不发布的单例。您的代码中可能只有一个定义,这就足够了。

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

因此,如果还不清楚,请修改 XCode 发现有问题的行以包含单词 oneway

于 2011-10-11T18:43:53.987 回答