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

Kir*_*n S 28 iphone objective-c xcode4.2

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

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

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

SYNTHESIZE_SINGLETON_FOR_CLASS(GlobalClass);

更新:这是 它解释的帖子 - (单向无效)发布;

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

Pau*_*ory 50

您链接到的帖子包含标题中问题的解决方案,并解释了为什么它发生在您身上.

但是,从阅读您的问题看来,您的新问题似乎是由于错误地应用了该帖子答案中的好建议.我相当肯定你了这条线

- (oneway void) release {}
Run Code Online (Sandbox Code Playgroud)

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

- (void) release {
Run Code Online (Sandbox Code Playgroud)

加上额外的单词"oneway".

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

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

不要过于字面地记录所有错误,并且总是试着想一下某人可能真正意味着什么,因为它通常与他们所说的不同,但是请尝试理解代码中的内容,即使是在你从架子上下来的课程中也是如此. .

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

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

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