On 25 Jun 2011, at 08:56, Helge Hess wrote: > On Jun 10, 2011, at 6:14 AM, Richard Frith-Macdonald wrote: >> is pretty much unique to you I think > > I was also assuming that -retain can return a different object. Otherwise it > should be void (aka AddRef()) ...
I'm all in favour of defensive programming like doing things like checking the result of -retain but ... See the Apple documentation at http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html As you can see retain returns self, it does so as a convenience for use in nested expressions and it is specifically a no-op in gc environments (which means that the compiler/runtime is free to remove the call to -retain entirely if you are using gc). Short of saying something like 'this method really, *really*, REALLY never returns a different object from the receiver', I don't see how the documentation could be clearer, and I'm certain there is a lot of code written by a lot of people which depends on the documented behavior, so overriding -retain to do something else would be a fault/bug. The clang compiler even complains that you are assigning a value to itsself if you write 'x = [x retain]' So if you write code which overrides -retain to return a different object, the code is broken and you deserve what you get ... the documentation says its wrong, the compiler says it's wrong, and in a gc environment the retain method probably won't even be called. Anyway, this is my last post on this topic ... I think it's been done to death. _______________________________________________ Gnustep-dev mailing list [email protected] https://lists.gnu.org/mailman/listinfo/gnustep-dev
