NSArray.array / .new / @ / alloc-init之间的区别
似乎有不同的方法实例化NSArrays(NSDictionary和其他一些)。
我知道:
[NSArray array]
-
[NSArray new]
-
@[]
-
[[NSArray alloc] init]
出于可读性的原因,我通常坚持使用[NSArray array]
,但所有这些之间的区别是什么,它们是否都一样?
结果是相同的,你会得到一个新的空的不可变数组。 不同的方法虽然有不同的内存pipe理含义。 使用ARC这最终没有什么区别,但在ARC之前,你必须使用正确的版本或发送适当的保留,释放或自动释放消息。
[NSArray new]
和[[NSArray alloc] init]
返回一个+1保留计数的数组。 ARC之前,你将不得不释放或autorelease该数组或泄漏内存。
[NSArray array]
和@[]
返回一个已经autoreleased数组(保留计数0)。 如果你想在没有ARC的情况下坚持下去,你必须手动保留它,否则在当前autorelease池被popup时它会被释放。
-
[NSArray array]
:创build并返回一个空数组 -
[NSArray new]
:alloc
,init
并返回一个NSArray
对象 -
@[]
:与1相同。 -
[[NSArray alloc] init]
:与2相同。
不同的[NSArray array]
和[[NSArray alloc] init]
是否有非ARC:
-
[NSArray array]
是一个autorelease对象。 如果你想保留它,你必须调用retain
。 例如,当你return
一个数组。 -
[[NSArray alloc] init]
是一个保留的对象。 所以如果你想retain
话,你不需要更多的保留。
用ARC,他们是一样的。
- RetainCount确定在这种情况下使用?
- Google SignIn CocoaPods已弃用
- connectionDidFinishLoading:不使用[NSURLConnection sendAsynchronousRequest:queue:completionHandler:
- 使用平移识别器来控制ScrollView
- 解除键盘后如何保持UITextField的游标处于焦点状态?
- 最好的“初始化”方法来设置iOS 7的variables值?
- 在Swift中更新未select的tabBarItem的徽章
- iOS上的内存交换和虚拟内存
- 找不到UIKit / UIKit.h文件 – XCode 4.6.1 – Objective-C