如何在for循环中将名为obj1,obj2,obj3,...的对象添加到NSMutableArray中

时间:2015-04-30 11:32:03

标签: ios objective-c loops nsmutablearray

有更好的方法吗?
_studentArray = [[NSMutableArray alloc] initWithObjects:student0, student1, student2, student3, student4, student5, student6, student7, student8, student9, student10, student11, student12, student13, student14, student15, student16, student17, student18, student19, nil];

使用FOR循环?

4 个答案:

答案 0 :(得分:1)

正如其他人所指出的那样,最好不要首先在唯一命名的变量(student0,student1,student2等)中创建20个不同的对象。最好先在阵列中创建它们,正如其他人所指出的那样。

如果您必须处理大量类似的实例变量,您应该能够使用valueForKey来查找它们:

_studentArray = [NSMutableArray arrayWithCapacity: 20];
for (int i=0; i< 20; i++)
{
  NSString *keyName = [NSString stringWithFormat: @"student%d", i];
  id aStudentVar = [self objectForKey: keyName];
  _studentArray[i] = aStudentVar;
}

我还没有对此进行测试,但它应该可行。但是,再次,拥有那么多顺序命名的实例变量是一个坏的&#34; code smell&#34;。几乎可以肯定,有更好的方法来做你正在做的事情。

答案 1 :(得分:0)

取决于来自何时以及何时获得多少物体的来源

如果您正在获取所有对象,您可以像上面一样添加或使用for循环添加单个对象。

如果您一次获得一个对象,请添加它并添加其他对象。

答案 2 :(得分:0)

这取决于学生对象的来源,创建方式等等。但我认为你应该重新考虑你的代码,不要像你那样为每个学生提供参考。试想一下,如果facebook和你每个用户一样做的话会有多难?

如果您是自己创建学生对象,请尝试这样的方法:

- (void)viewDidLoad {


    _studentArray = [NSMutableArray new];

    for (int i = 0; i < 20; i++) {

        Student *student = [[Student alloc] init];
        [_studentArray addObject:student];
    }

    //At this point you will have the same that you did.

    //To access the 2nd student for example, you could do
    Student *theSecond = _studentArray[1]; //(because array index starts from 0)
    theSecond.name = @"Peter";
}

或者如果您想同时创建并添加到_studentsArray

- (void)viewDidLoad {

    _studentArray = [NSMutableArray new];

    [self registerStudentWithName:@"Peter"];
    [self registerStudentWithName:@"John"];
    //and so on...

    Student *firstStudent = _studentArray[0];
    NSLog(@"%@", firstStudent.name); //Prints Peter
}

- (void)registerStudentWithName:(NSString *)name {

    Student *student = [[Student alloc] init];
    student.name = name;
    [_studentArray addObject:student];
}

答案 3 :(得分:-1)

它非常简单,你所要做的就是为一些计数开始循环。

for(int i=0;i<20;i++) { 
    NSString *obj = [[NSString alloc]init];
    [_studentArray addObject:obj]; 
}