NSArray initWithObjects:保留对象吗?

时间:2010-10-27 18:08:22

标签: iphone objective-c cocoa-touch

使用“initWithObjects”向NSArray添加对象时,任何人都可以确认是否保留了这些项目。我很确定它们是,但是在initWithObjects的任何地方都找不到它?

// CREATE DRINKS
Coffee *drink1 = [[Coffee alloc] initWithName:@"Flat White"];
Coffee *drink2 = [[Coffee alloc] initWithName:@"Cappucino"];
Coffee *drink3 = [[Coffee alloc] initWithName:@"Latte"];
Coffee *drink4 = [[Coffee alloc] initWithName:@"Mocha"];
Coffee *drink5 = [[Coffee alloc] initWithName:@"Hot Chocolate"];

// SET ARRAY
NSArray *tempArray = [[NSArray alloc] initWithObjects:drink_1, drink_2, drink_3, drink_4, drink_5, nil];
[self setCoffeeList:tempArray];

// CLEAN UP
[drink_1 release];
[drink_2 release];
[drink_3 release];
[drink_4 release];
[drink_5 release];
[tempArray release];
[super viewDidLoad];
欢呼加里

2 个答案:

答案 0 :(得分:5)

initWithObjects保留数组中的所有项目。

initWithObjects:count:

  • (id)initWithObjects:(id *)对象计数:(NSUInteger)计数; 可用性:OpenStep

这是该课程的指定初始化者。 子类必须覆盖此方法。 这应该用count(可能是零)对象初始化数组。 保留放置在数组中的每个对象。 调用-init(除了保持MacOS-X兼容性之外什么都不做),需要在子类中重新实现,以便让所有其他初始化程序都能正常工作。

答案 1 :(得分:4)

预计对象将拥有他们需要保留的东西。数组负责其项目,因此它保留它们。有关完整的详细信息,请参阅memory management guide。 (不,真的,请仔细阅读。以后当你不必向你使用的每个课程提出这个问题并且你的程序没有每五秒钟崩溃时,你会感谢你。)