Singleton release method produces warning?

Objective CWarnings

Objective C Problem Overview


In my singleton release method, I have it doing nothing:

-(void) release {
  //A whole lot of nothing.
}

But it produces this warning:

Warning: Conflicting distributed object modifiers on return type in implementation of 'release'

I googled and saw others have the same error, but no explanation of the warning. Anyone know what the warning is about?

Objective C Solutions


Solution 1 - Objective C

You need to declare it oneway.

- (oneway void) release {}

oneway is a keyword used with distributed objects to indicate that the call can be made asynchronously. Since the NSObject header uses it when it declares the release method, you must also use it. It won't affect your program unless you use distributed objects, but it will satisfy the compiler.

Solution 2 - Objective C

In NSObject.h, the definition of the release method returns a oneway void.

The oneway keyword is used for distributed objects.

Since Xcode4.2 and LLVM, checkings are more strong and if it was accepted by previous versions of Xcode or by gcc, you now need to add this oneway keyword so that the LLVM compiler stops warning about this.

-(oneway void) release { /* do nothing */ }

This won't have any incident on your code.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDarkenorView Question on Stackoverflow
Solution 1 - Objective CughoavgfhwView Answer on Stackoverflow
Solution 2 - Objective CAliSoftwareView Answer on Stackoverflow