-2

假设我想创建一组图像,我使用了这个:

NSMutableArray *images = [[NSMutableArray alloc]init];

init 在这里真正扮演什么角色?如果我简单地使用它不会工作:

NSMutableArray *images = [NSMutableArray alloc];

请帮忙。谢谢。

4

4 回答 4

5

不,你绝对不能只说[NSMutableArray alloc]+alloc对发送到任何类的结果调用方法是绝对不正确的,除非该方法是其中一种-init...方法。+alloc所做的只是为对象保留内存。它基本上相当于调用calloc(sizeof(class), 1). 该-init方法对于将对象实际初始化为工作状态至关重要。

于 2012-07-13T20:13:09.473 回答
1

这不仅适用于数组,也适用于任何可以实例化的 Objective-C 类:alloc分配内存来保存实例,但不往里面放任何东西,init实际上在那个内存位置初始化一个对象。

于 2012-07-13T20:17:24.827 回答
0

尽管在某些情况下,Objective-C 内部有很多“混搭”来使方案短路,但在理论模型alloc中,仅为对象创建(从堆分配)空间。空间的内容本质上是随机的——前一个对象留下的任何东西都占据了那个位置。

之后allocinit以特定于类的方式初始化空间。对于 NSMutableArray,这意味着创建了一个标头(其中的第一部分实际上是通过对 NSObject的super调用创建的),并且初始化了正在使用的数组条目数之类的东西。init

请注意,对于 NSMutableArray,您可以调用array“方便”方法而不是alloc/init, 来执行[[[NSMutableArray alloc] init] autorelease]. 对于任何类,您都可以调用new“方便”方法来执行等效的[[SomeClass alloc] init].

于 2012-07-13T20:31:13.880 回答
0

苹果参考

为了在使用 NSMutableArrays 时获得最佳性能,您总是希望使用initWithCapacity:25或附近。这为合理数量的行或条目清除了足够的内存。如果你把它留在初始化,我相信它会初始化到初始容量 0,这意味着你每次添加东西时都必须分配新的内存,这会损害你的应用程序的性能。

于 2012-07-13T20:12:48.070 回答