这两者有什么区别?

时间:2014-02-23 14:44:36

标签: objective-c oop

我仍然围绕着一些Objective-C缠身,我想我已经开始了解它。我正在玩一些对象数组,我正在尝试理解下面两者之间的区别(arr和arr2)。

他们似乎都做了同样的事情。如果他们确实有所不同,那么有人可以提供一些背景和一个更有效的例子和原因吗?

NSDate *futureDate = [NSDate distantFuture];
NSDate *todaysDate = [NSDate date];

// what is the difference between these two?
NSArray *arr = [[NSArray alloc] initWithObjects:todaysDate, @"Hello", @"World!", @1, @2, @3, @4, futureDate, nil];
NSArray *arr2 = [NSArray arrayWithObjects:todaysDate, @"Hello", @"World!", @1, @2, @3, @4, futureDate, nil];


for (id item in arr)
    NSLog(@"%@", item);

for (id item in arr2)
    NSLog(@"%@", item);

1 个答案:

答案 0 :(得分:0)

差异取决于您的内存管理。如果您使用的是ARC(最近版本中的默认值),则这两个版本是等效的。

但是,如果您使用的是老式的手动管理,则它们会有所不同:arr的保留计数为1,因为显式调用了-alloc。这意味着你'拥有'那个对象,并且当你完成它时负责调用-releasearr2但是会​​被“自动释放”,这意味着 NOT 属于您,并且您不负责释放它。在这种情况下,它将在当前runloop结束时自动释放。