可以有人告诉我声明一个可变数组的区别:
NSMutableArray *array = [NSMutableArray array];
Run Code Online (Sandbox Code Playgroud)
和
NSMutableArray *array = [[NSMutableArray alloc] init];
Run Code Online (Sandbox Code Playgroud)
因为在开始时我用alloc来声明我的所有数组,如果在某个函数的最后我返回了使用alloc创建的数组,我必须自动释放该数组,因为内存泄漏问题.
现在使用第一个声明我不需要发布任何内容.
谢谢
例如,假设我想使用a开始创建键/值对NSMutableDictionary.然后我似乎至少有三个选项来创建一个具有未指定容量的空的可变字典:
NSMutableDictionary *mutDict = [[NSMutableDictionary alloc] init]; // 1
NSMutableDictionary *mutDict = [NSMutableDictionary new]; // 2
NSMutableDictionary *mutDict = [NSMutableDictionary dictionary]; // 3
Run Code Online (Sandbox Code Playgroud)
现在,正如我所理解的那样,[NSObject new]实际上(如果不完全相同)是相同的[[NSObject alloc] init].因此,就我而言,我们基本上可以合并这两个选项.但是关于[NSDictionary dictionary]方法,文档说:
字典
创建并返回一个空字典.
+ (id)dictionary回报价值
一个新的空字典.
讨论
声明此方法主要用于可变子类
NSDictionary.如果您不想要临时对象,还可以使用
alloc...和创建一个空字典init.
关于此文档,我有几个问题要问:
首先,为什么它甚至在NSDictionary中声明而不是NSMutableDictionary,如果它是打算使用的地方?
其次,在这种背景下,"临时对象"是什么意思?
总结:与前两个相比,上面的第三个替代方案之间是否存在差异?难道有事情做与自动释放的对象?这在自动引用计数(ARC)上下文中是否有效?
请注意,此问题也适用于其他类,例如[NSData data]和[NSArray array].
我正在使用XCode 4.6.1和iOS 6.1.使用ARC,这些天我使用哪一个是否重要?也许从某些角度来看表现?
感谢您对此有任何明确的信息!