创建对象并在循环中设置iVars?
问题描述:
NSArray *planetArray = [NSArray arrayWithObjects:@"Earth",
@"Jupiter",
@"Saturn",
@"Neptune",
@"Pluto", nil];
NSMutableArray *objectArray = [[NSMutableArray alloc] init];
for(NSString *eachPlanet in planetArray) {
Planet *newPlanet = [[Planet alloc] init];
[newPlanet setValue:eachPlanet forKey:@"name"];
[newPlanet setValue:@"TEST" forKey:@"type"];
[newPlanet setValue:[NSNumber numberWithInt:1234] forKey:@"mass"];
[objectArray addObject:newPlanet];
[newPlanet release];
}
for(Planet *displayEachPlanet in objectArray) {
NSLog(@"DATA: %@", displayEachPlanet);
}
[objectArray release];
我很好奇,如果这是创建对象并为数组中的每个项目设置iVar的最佳方式。基本上我:创建对象并在循环中设置iVars?
- 创建行星对象
- 设置IVAR(来自的NSString阵列)
- 添加行星对象到一个数组。
释放的行星对象
打印我的星球对象
松开阵列
注:我只是测试,这不是什么,我只是好奇。 ..
欢呼声Gary
答
这样做看不出有什么严重错误。其中一个建议是对你的星球类的扩展初始化器,沿着线:
-(Planet*) initWithName:(NSString*)name andType:(NSString*)type withMass:(int)mass;
,然后创建行星:
Planet *newPlanet = [[Planet alloc] initWithName:eachPlanet andType:@"Test" withMass:42];
答
对我来说很好。如果你用这些对象所做的一切都是从它们打印出来的东西,那么你可以在一个循环中用较少的初始化操作来完成它,但如果这只是一个测试..看起来很好。
+0
非常感谢,谢谢。 – fuzzygoat 2010-07-19 18:33:12
我没有想到这一点,我也在看KVC,所以这就是为什么我设置循环中的iVar。这非常好,谢谢。 – fuzzygoat 2010-07-19 18:34:58