> On Aug 8, 2017, at 12:35 PM, Quincey Morris 
> <quinceymor...@rivergatesoftware.com> wrote:
> I don’t have a problem with using “new” vs. alloc/init, but there are a 
> couple of technical issues hiding behind this, though in current practice 
> they make little difference.
> 1. NSObject has “new” with a standard meaning. That means you can use “new” 
> on any subclass where it’s OK to use the simple “init” without parameters. 
> However, for classes that need parameters, or have multiple inits, there’s no 
> standard “newWithX:…” class method unless you provide it yourself.
> You can’t really provide this for Cocoa classes (you could try adding it via 
> a category, but this seems like a bad idea), which means your code uses a 
> mixture of strategies to create instances, even of the same class, depending 
> on the parameters needed. If that doesn’t bother you, fine. This is purely a 
> matter of preference.
> 2. In modern Obj-C, a class method beginning with “new…” is specially 
> meaningful to the compiler under ARC. By default, it has +1 ownership 
> semantics for the returned reference. Using Jens’ earlier example, that means 
> that the following are subtly different:
>>      [NSArray array]         // +0 semantics
>>      [NSArray new]           // +1 semantics
> For custom “new…” methods, the declaration can override the default semantics 
> with a compile-time attribute, which means you cannot in general be certain 
> of the semantics without looking at the declaration.
> Of course, if the *calling* code is also ARC, then it doesn’t matter, because 
> ARC keeps track of the semantics for you.

Thank you.  These concerns are exactly what I was looking for.  Thanks for 
expressing them much better than I could.


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:

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

Reply via email to