2010-07-19 52 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