我仍然围绕着一些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);
答案 0 :(得分:0)
差异取决于您的内存管理。如果您使用的是ARC(最近版本中的默认值),则这两个版本是等效的。
但是,如果您使用的是老式的手动管理,则它们会有所不同:arr
的保留计数为1,因为显式调用了-alloc
。这意味着你'拥有'那个对象,并且当你完成它时负责调用-release
。 arr2
但是会被“自动释放”,这意味着 NOT 属于您,并且您不负责释放它。在这种情况下,它将在当前runloop结束时自动释放。