创建对象&将iVars设置为循环?

时间:2010-07-19 18:14:45

标签: iphone objective-c cocoa-touch

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的最佳方法。基本上我是:

  1. 创建一个Planet对象
  2. 设置iVar(来自NSString数组)
  3. 将Planet对象添加到数组中。
  4. 发布Planet对象

  5. 打印我的星球对象

  6. 发布数组

  7. 注意:我只是在测试,这不是什么,我只是好奇......

    欢呼加里

2 个答案:

答案 0 :(得分:3)

以这种方式做到这一点看不出任何严重错误。一个建议是为你的星球类提供一个扩展的初始化器,类似于:

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

然后创建行星:

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

答案 1 :(得分:1)

对我来说很好看。如果您正在使用对象进行的操作是从它们打印的东西,您可能在一个循环中执行它而初始化较少等等,但如果那只是一个测试..看起来很好。