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



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

其中之一是在我的单例类中"在'release'实现中返回类型上冲突的分布式对象修饰符"。

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

SYNTHESIZE_SINGLETON_FOR_CLASS (GlobalClass);

更新:这篇文章解释了- (oneway void)释放;

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

你链接到的文章在标题中包含了问题的解决方案,并解释了为什么会发生在你身上。

然而,从你的问题来看,你的新问题似乎是由于错误地应用了那篇文章的答案中的伟大建议而引起的。我很确定你把加在这行

- (oneway void) release {}

,而不是修改现有的

- (void) release {

一行加上额外的单词"oneway"

这就是为什么你会得到"Duplicate declaration of release"。是的,这是令人困惑的,因为它是一个不可见地创建重复声明的重复定义。但是我刚刚尝试了你错误的方式,我得到了"重复声明"的消息。

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

不要把所有的错误都从字面上看,总是试着去思考别人的真正意思,因为它通常与他们所说的不同,但一定要试着理解你的代码中有什么,即使是在你从架子上拿下来的类中。

为了解决其他问题,你重写release的原因是因为它是一个通常不被释放的单例。您可能在代码中只有一个定义,这就足够了。

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

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

最新更新