2010-07-19 50 views
0
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?

  1. 创建行星对象
  2. 设置IVAR(来自的NSString阵列)
  3. 添加行星对象到一个数组。
  4. 释放的行星对象

  5. 打印我的星球对象

  6. 松开阵列

注:我只是测试,这不是什么,我只是好奇。 ..

欢呼声Gary

回答

3

这样做看不出有什么严重错误。其中一个建议是对你的星球类的扩展初始化器,沿着线:

-(Planet*) initWithName:(NSString*)name andType:(NSString*)type withMass:(int)mass; 

,然后创建行星:

Planet *newPlanet = [[Planet alloc] initWithName:eachPlanet andType:@"Test" withMass:42]; 
+0

我没有想到这一点,我也在看KVC,所以这就是为什么我设置循环中的iVar。这非常好,谢谢。 – fuzzygoat 2010-07-19 18:34:58

1

对我来说很好。如果你用这些对象所做的一切都是从它们打印出来的东西,那么你可以在一个循环中用较少的初始化操作来完成它,但如果这只是一个测试..看起来很好。

+0

非常感谢,谢谢。 – fuzzygoat 2010-07-19 18:33:12