• 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: [Foo new] vs [[Foo alloc] init]:
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Foo new] vs [[Foo alloc] init]:


  • Subject: Re: [Foo new] vs [[Foo alloc] init]:
  • From: Gregory Weston <email@hidden>
  • Date: Sat, 16 Feb 2008 16:16:13 -0500


On Feb 16, 2008, at 12:11 PM, Bill Bumgarner wrote:

On Feb 16, 2008, at 4:56 AM, Gregory Weston wrote:
Without that guarantee, there's a different between saying "this statement accurately describes all current implementations" and "this statement is correct." It is not correct in general to say that "[Foo new] is exactly equivalent to [[Foo alloc] init]." Those are the kind of assumptions that burn you after you've forgotten you made them in the first place.

In general, I agree. In this particular case, I'm not concerned. If Apple were to change the implementation of +new to *not* do +alloc followed by -init, many many bits of code would break. Binary compatibility between release of Mac OS X is critical and, thus, this particular behavior cannot change.

I'm afraid I don't understand that assertion at all. What does this have to do with binary compatibility? Why did it *not* break compatibility in the move from 10.4 (in which new does not invoke alloc by default) to 10.5 (in which it does)?


Reading the docs, it explicitly states:

...
This method is a combination of alloc and init. Like alloc, it initializes the isa instance variable of the new object so it points to the class data structure. It then invokes the init method to complete the initialization process.
...


From there, the documentation entirely discusses implementing +new... as a cover for various -initWith... style initializers.

Thus, the bare behavior of +new is quite thoroughly well defined as a combination of +alloc and -init (in the docs, the the two method names are links to the documentation of said methods).

It's well defined as being functionally equivalent by default to alloc and init. It is even defined, as I had already noted, as invoking init specifically. Given that explicitness, I would argue that it's likely meaningful that the documentation does *not* explicitly indicate that it invokes alloc. In fact the implication of "Like alloc, ..." is very strongly that it's only guaranteed to be an equivalent, not a wrapper. And since any developer who wants can override alloc and new at any time they like, even though Apple *does* implement new to invoke alloc by default it cannot be reliably said to do so.
_______________________________________________


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: [Foo new] vs [[Foo alloc] init]:
      • From: Bill Bumgarner <email@hidden>
References: 
 >Re: [Foo new] vs [[Foo alloc] init]: (From: Gregory Weston <email@hidden>)
 >Re: [Foo new] vs [[Foo alloc] init]: (From: Bill Bumgarner <email@hidden>)
 >Re: [Foo new] vs [[Foo alloc] init]: (From: Gregory Weston <email@hidden>)
 >Re: [Foo new] vs [[Foo alloc] init]: (From: Bill Bumgarner <email@hidden>)

  • Prev by Date: AnimatingTabView broken
  • Next by Date: Re: acceptable method for finding path to /usr/bin
  • Previous by thread: Re: [Foo new] vs [[Foo alloc] init]:
  • Next by thread: Re: [Foo new] vs [[Foo alloc] init]:
  • Index(es):
    • Date
    • Thread