> On Aug 19, 2016, at 8:25 PM, Kyle Sluder <k...@ksluder.com> wrote:
> 
> 
> 
> On Fri, Aug 19, 2016, at 06:08 PM, Charles Srstka wrote:
>>> On Aug 19, 2016, at 3:46 PM, Quincey Morris 
>>> <quinceymor...@rivergatesoftware.com> wrote:
>>> 
>>> On Aug 19, 2016, at 10:53 , Charles Srstka <cocoa...@charlessoft.com 
>>> <mailto:cocoa...@charlessoft.com>> wrote:
>>>> 
>>>> [NSArray array] is a synonym for [[[NSArray alloc] init] autorelease].
>>> 
>>> (along with other similar comments in other responses)
>>> 
>>> To be pedantic, it’s *implemented* as [[[NSArray alloc] init] autorelease], 
>>> but the lack of an API contract to that effect means that “synonym” isn’t 
>>> quite accurate.
>>> 
>>> My point is that Apple might revisit the implementation of NSArray at any 
>>> time (in these Swiftian days, stranger things have happened), and choose to 
>>> write it with full ARC compatibility, which means there might not be any 
>>> autorelease when invoked from ARC client code, since ARC can optimize the 
>>> code when it handles both ends of the invocation.
>> 
>> Swift typically just calls the initializer if it’s there, so the
>> convenience initializers like +[NSArray array] are really only relevant
>> to Objective-C code. For that reason, I doubt they’d change unless Apple
>> did something crazy like rewrite the entire frameworks in Swift, in which
>> case they’d probably go away.
> 
> There is an official reimplementation of Foundation/CoreFoundation in
> Swift. The implementation of NSObject lacks a `static func new`:
> <https://github.com/apple/swift-corelibs-foundation/blob/master/Foundation/NSObject.swift>
> Likewise, Swift explicitly does not bridge `+new` from ObjC, so this is
> a moot point in Swift code.

When dealing with an Objective-C object ‘Foo', Swift’s initializer Foo() calls 
[[Foo alloc] init] under the hood, which is the same thing +new does, so +new 
is of course not necessary in Swift and is not imported (just like +[NSArray 
array]).

>> So for the foreseeable future, the
>> difference is that +array returns an autoreleased object, meaning that in
>> ARC code, +new is the better choice.
> 
> I would not make that assumption. Who says +[NSArray array] constructs
> anything at all? Try comparing the return values of two calls to
> [NSArray array] sometime. ;-)
> 
> I happen think +new is more readable, but it’s really just a matter of
> preference.

Just because you didn’t create a brand-new object doesn’t mean you can’t (or 
that you shouldn’t, under pre-ARC coding conventions) do a retain-autorelease 
dance on it.

Charles


_______________________________________________

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

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

Reply via email to