建议初始化数组(或其他对象)的最佳方法

Mad*_*dav 2 iphone memory-management initialization objective-c

我在以下两种初始化方式中有点困惑.....

方式1:

- (void) myMethod{

    NSArray *myArray = [[NSArray alloc] initWithObjects:obj1,obj1,nil];
    [self setClassArray:myArray];
    [myArray release];
}
Run Code Online (Sandbox Code Playgroud)

方式2:

- (void) myMethod{

NSArray *myArray = [NSArray arrayWithObjects:obj1,obj2,nil];
[self setClassArray:myArray];
}
Run Code Online (Sandbox Code Playgroud)

在方式1中,我使用了一个alloc init方法,这是一个实例方法,因为我使用了一个alloc语句,我必须自己释放数组.

在方式2中,我使用静态方法来初始化数组,因为没有使用alloc语句,所以我不需要释放系统将处理的内存.

方式1,耗时并且如果不注意可能导致内存泄漏

方式2,写作速度更快,您不需要处理内存泄漏

但是,我仍然看到标准源代码中使用的way1比way2更常见.我不知道为什么人们这样做或者我在某个地方错了.

答案和评论是特别邀请的.请提出最好的编程习惯.

Ste*_*son 5

您的第二个示例使用便捷构造函数,该构造函数返回自动释放的对象.那么问题是,使用autoreleasealloc/ 是否更好release.mmalc 对此StackOverflow线程回答解释了自动释放对象的缺点.(基本上,尽可能使用alloc/ release.)

另外(这可能说明显了),有些类可能没有方便构造函数,所以在使用这些时你必须使用alloc/ release.