What kind of object does @[obj1, obj2] create?

六眼飞鱼酱① 提交于 2019-12-17 16:46:16

问题


I came across the following:

NSArray *array = @[object1, object2];

It seems to be creating an NSArray, but is this array instance an autoreleased object, or must I release it?


回答1:


This is a new collection literal available in the compiler that ship with xcode 4.4 and above

@[object1, object2];

is equivalent to

[NSArray arrayWithObjects:object1, object2, nil];

so yes, it is an autoreleased object, if you need this to be retained, you can do

myRetainedArray = [@[object1, object2] retain];

this question has a good description of all of the new literals




回答2:


It's the new llvm compiler's literal for creating an array. The compiler changes this to:

NSArray *array = [NSArray arrayWithObjects: object1,object2,nil];

So it is returning an autoreleased object.

A Google search brought up further info:

http://clang.llvm.org/docs/ObjectiveCLiterals.html



来源:https://stackoverflow.com/questions/11759708/what-kind-of-object-does-obj1-obj2-create

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!