在循环中创建20个对象

时间:2011-09-22 11:54:38

标签: objective-c

我需要一些新手的帮助。 所以基本上我试图创建20个单独的对象(玩家)。每位球员都有姓名,年龄和身高。

而不是写'Person * player = [[Person alloc] init];'二十次,我做了一个循环。 我认为循环有效,因为[myArray count]有20个对象。

我的问题:

20个对象是否唯一(所有具有相同的名称,年龄,身高)?

为MyArray的每个元素中的每个对象提供名称,年龄,身高的最佳方法是什么?

所以我的最终目标是能够做到这样的事情:

NSLog(@"%@ is %i high and is %i years old", player1.name, player1.height, player1.age);

NSLog(@"%@ is %i high and is %i years old", player2.name, player2.height, player2.age); 

等...

我希望上述内容有道理,我非常感谢你的帮助。

#import <Foundation/Foundation.h>

#import "Person.h"

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];


    NSMutableArray  *myArray = [[NSMutableArray alloc]initWithCapacity:20];


    for (int i = 0; i < 20; i++)
    {
        Person *player = [[Person alloc] init];
        player.age = 10;
        player.height = 10;
        player.name = @"player";
        [myArray addObject:player];       
        [player release];         
    }

    NSLog(@"The number of players in myArray = %i", [myArray count]); // I now have 20 players (objects) in myArray.

//How can I now give each player object an individual name, age & height ??     
    [pool drain];
    return 0;
}

2 个答案:

答案 0 :(得分:4)

  • 这些物品是否独一无二?是的,他们是。
  • 给每个对象命名,年龄,身高的最佳方法是什么?这个问题不清楚,所以你给循环中的对象提供年龄,身高和名称的方式是正确的,但当然你要为所有对象提供相同的信息;给它们唯一的名称取决于你的应用程序逻辑,例如你可以用这种方式随机分配年龄:
player.age = arc4random()%90;

您可以对高度执行相同操作(最终使用稍微复杂的公式,例如140 + arc4random()%50)。最后,对于高度,您可以通过以下方式指定派生名称:

player.name = [NSString stringWithFormat:@"Player-%d",i];

分配名称Player-0,Player-1,...

  • 最后打印出NSLog中的数据:
NSLog(@"Player %d : name=%@ height=%d age=%d",i,player.name,player.height,player.d)

或在不同的循环中:


int i = 0;
for(Person *player in myArray) {
  NSLog(@"Player %d : name=%@ height=%d age=%d",i,player.name,player.height,player.d);
  i++;
}

答案 1 :(得分:0)

一些项目。

如果我理解您的后续问题,您要查看的是访问存储在数组中的对象,以便您可以更改其属性的值。

然而,上面的海报回答了你问的实际问题,你应该标记他的正确。

如果您想浏览阵列中的每个项目,请执行以下操作:

for (int i=0; i<[players count]; i++) {
Player *aPlayer = [players objectAtIndex:i];
aPlayer.name = @"joe";
}

如果您只想访问单个玩家:

Player *aPlayer = [players objectAtIndex:4];
aPlayer.name = @"joe";

此外,您可能希望自定义Player类并覆盖描述,这样您就不必重复键入复杂的NSLog语句。

-(NSString *)description{
    return [NSString stringWithFormat:@"name = %@ age = %d height = %d", self.name, self.age, self.height];
}

通过重写描述方法,在对象上调用NSLog将返回此语句中的字符串。