On 10 Aug 2017, at 15:24, Jeremy Hughes <moon.rab...@virginmedia.com> wrote: > >> On 10 Aug 2017, at 15:15, Alastair Houghton <alast...@alastairs-place.net> >> wrote: >> >> On 10 Aug 2017, at 15:09, Charles Srstka <cocoa...@charlessoft.com> wrote: >>> >>> They’re equivalent syntactically, but performance-wise, +array and friends >>> will cause the object to be put into an autorelease pool. Therefore, +new >>> is better for performance. >> >> Not with ARC they don’t. The ARC logic circumvents the autorelease pool in >> that case. > > Are you sure?
Yes, I’m sure. At the call site, ARC causes the compiler to emit a call to objc_retainAutoreleasedReturnValue() or objc_unsafeClaimAutoreleasedReturnValue(), while in the method itself, ARC will use objc_autoreleaseReturnValue() or objc_retainAutoreleaseReturnValue(). The latter looks at the code for the call site and, assuming it matches, it will *not* do the autorelease and will set a flag that causes objc_retainAutoreleasedReturnValue() to eliminate the retain. > We had a discussion about autorelease pools recently, and it seems that > they’re still used by Cocoa APIs (to support ARC and non-ARC code). Yes, autorelease pools still exist and are still used. Not all code uses ARC, and for the above optimisation to happen, the code needs to use the functions mentioned, which will only happen if either (a) it’s compiled with ARC, or (b) those calls are used explicitly. You can see the code for this in the Objective-C runtime code, <here: https://opensource.apple.com/source/objc4/objc4-709/runtime/objc-object.h.auto.html> (search for SUPPORT_RETURN_AUTORELEASE). Kind regards, Alastair. -- http://alastairs-place.net _______________________________________________ Cocoa-dev mailing list (Cocoafirstname.lastname@example.org) 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 arch...@mail-archive.com