• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: self = [super init] debate.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: self = [super init] debate.


  • Subject: Re: self = [super init] debate.
  • From: John Newlin <email@hidden>
  • Date: Sun, 10 Feb 2008 11:13:12 -0800

I don't think that's correct. self is an implicit variable on the caller's stack. After you call the function (err, send the message) init, your local copy of self will be the same. So the snippet of code:

[super init]
if (self != nil)

won't do what you are saying. self will still be a non-nil value. Setting self to the return value of init is just a way of making sure you don't send any other messages to this object if the init fails.

-john



On Feb 10, 2008, at 10:41 AM, Adhamh Findlay wrote:

I'm no expert, but here is my take.

This argument is not able what is correct, but about style. Shipley is saying you're wasting 7 characters with the self = [super init] assignment because [super init] does the assignment for you. Shipley is correct that you don't need to do the assignment, but I don't believe doing the assignment is ever going to cause problems, its just extra.

But what's more important, writing correct code or writing code that is clear and correct? Just because you don't have to do something, if you do it does that make the code incorrect? I think clear and correct is better and doing something extra doesn't make the code wrong if its more clear.

Is it more clear to write this:

[super init];
if(self != nil)

or

self = [super init];
if(self != nil)

I think it is the second because its explicit.

My guess is that the majority of Cocoa programmers go the assignment route because that's what they've been taught. When you are teaching your class you should tell your students that they don't have to do the assignment, but that by convention most Cocoa programmers do. That way they are informed about how things actual work.

Adhamh

On Feb 10, 2008, at 11:35 AM, Scott Andrew wrote:

One point of research (going through my books.)

The Cocoa with Objective-C book shows not assigning self.. Arg.. So where do we get in the habit of assigning self? Is it bad code practice? I know i have done it for the past 4 years out of habit and learning from example code and other materials.

Scott

On Feb 10, 2008, at 9:18 AM, Scott Andrew wrote:

Ok. Myself, like most Cocoa engineers have learned to write initializers like so:

-(id) init
{
	self = [super init];

	if (self != nil)
	{
		.. do my init
	}

	return self;
}

So my question is:

As i get ready to teach non-cocoa programmers in my company about cocoa programming, and having read Will Shipley's blog, Is the above the way to teach writing an initializer? I see Will, and a few others, say no [super init] will initialize self in its code there is no reason to assign self. Yet all code and docs I see have similar code.

Arguments for and against? I know old debate.... ;-)

_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:
This email sent to email@hidden

_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:
This email sent to email@hidden


  • Follow-Ups:
    • Re: self = [super init] debate.
      • From: Wade Tregaskis <email@hidden>
References: 
 >self = [super init] debate. (From: Scott Andrew <email@hidden>)
 >Re: self = [super init] debate. (From: Scott Andrew <email@hidden>)
 >Re: self = [super init] debate. (From: Adhamh Findlay <email@hidden>)

  • Prev by Date: Re: self = [super init] debate.
  • Next by Date: Object vanished before it is removed?
  • Previous by thread: Re: self = [super init] debate.
  • Next by thread: Re: self = [super init] debate.
  • Index(es):
    • Date
    • Thread