On Oct 9, 2009, at 2:30 AM, Graham Cox wrote:

In init and dealloc, it is usual & recommended to access the ivar directly - not because self isn't defined (it is), but because at those times you are usually only concerned with setting the ivar's initial value (possibly to an object), or releasing it, without side effects.

Specifically, calling a setter in an -init method can cause trouble if a subclass has overridden that setter. The base class's -init method calls the setter, which invokes a method in the subclass, which runs ... but the subclass's own initializer hasn't run yet. So if the overridden setter depends on something that was initialized in the subclass's initializer, things break.


On Oct 9, 2009, at 2:01 AM, Matthias Arndt wrote:

2.) ... are there significant performance issues or other reasons to prefer the direct reference to (or direct assignment of) instance variables? At least the code of the setters / getters might impact the performance, but I'd sacrifice it for the sake of a consistent code.

This is kind of a religious issue. An individual Obj-C message-send isn't noticeably expensive, although it's still something like ten times the cost of a C++ virtual function call. So in most cases, using accessors instead of instance variables won't cause a problem. But what worries me is that this is the type of thing that creates tiny slowdowns in multiple places all over the code, and those add up. It's "death by a thousand cuts". To some extent this will show up in profiling as time spent in objc_msgsend; but it has other overhead that isn't centralized and won't show up in a profile. If you access a variable directly, the compiler can optimize that at the machine-code level and make the code more efficient than if there's a function-call required.

In my code I tend to use direct access to instance variables of self, except when the accessors are expected to be override-able. But other people make different choices.

—Jens_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to