我正在学习使用《Mac OSX下的Cocoa编程》第四版来学习Objective-C/Cocoa。很抱歉问一个基础问题,但我是那种需要了解每个细节才能理解的人,而这本书并不总是满足我的需求。我已经掌握了C++的基础知识,现在正在学习Obj-C。以下是我正在学习的代码片段...
for (i= 0; i < 10; i++) {
NSNumber *newNumber = [[NSNumber alloc] initWithInt:(i * 3)];
[array addObject:newNumber];
}
我的问题是:为什么要创建NSNumber的实例并将其添加到数组中,而不是使用一个整数变量?每次循环都创建一个新实例似乎只是增加了额外的开销,可以避免。但我相信作者知道他们在做什么,一定有原因,请问能解释一下吗?
[array addObject:@(i * 3)];
。 - rmaddyalloc
意味着+1的保留计数。addObject:
意味着第二个+1的保留计数。释放array
将释放那第二个+1。但是需要平衡alloc
的+1。如果启用了 ARC,则它将“正常工作”。如果没有启用,则在addObject:
行后添加[newNumber release];
将是正确的做法。 - bbum