On Jan 29, 2013, at 10:25 PM, Quincey Morris <[email protected]> wrote: > However, it occurs to me there's a better solution. Since we're talking about > ARC, this pattern: > > + (id) createBlaWithFoo: (NSString*) foo // or the return type can be Bla* if > you want > { > if (!foo) > return nil; > else > return [[Bla alloc] initWithFoo: foo]; > } > > is superior all round. It has no autorelease penalty, may reduce the number > of keystrokes at the call site, and is impervious to the particular exploding > dealloc problem we've been discussing.
Name the method `new...` instead of `create...`. Otherwise you do suffer an autorelease penalty with ARC. (`create...` is not one of the names that ARC assumes will return a retained result.) Use `[self alloc]` instead of `[Bla alloc]`. Otherwise you won't work well with subclasses. Return `(instancetype)` instead of `(id)` or `(Bla *)`. Otherwise you won't work well with subclasses. (The compiler will assume instancetype if your method is named `new...`, but not if you use some other name.) -- Greg Parker [email protected] Runtime Wrangler _______________________________________________ Cocoa-dev mailing list ([email protected]) 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: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to [email protected]
