Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 创建对象&;在循环中设置IVAR?_Iphone_Objective C_Cocoa Touch - Fatal编程技术网

Iphone 创建对象&;在循环中设置IVAR?

Iphone 创建对象&;在循环中设置IVAR?,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,我很好奇这是否是创建对象并为数组中的每个项设置iVar的最佳方法。基本上我是: 创建行星对象 设置iVar(从NSString数组) 将行星对象添加到阵列中 释放行星物体 打印我的行星对象 释放阵列 注:我只是测试,这不是为了什么,我只是好奇 干杯,加里对我来说很好。如果你对这些对象所做的只是从它们中打印一些东西,你可能可以在一个循环中用更少的初始化之类的方式来完成,但是如果这只是一个测试……看起来不错。对我来说不错。如果您对对象所做的只是从对象中打印一些内容,那么您可能可以在一个循环中使用较少

我很好奇这是否是创建对象并为数组中的每个项设置iVar的最佳方法。基本上我是:

  • 创建行星对象
  • 设置iVar(从NSString数组)
  • 将行星对象添加到阵列中
  • 释放行星物体

  • 打印我的行星对象

  • 释放阵列

  • 注:我只是测试,这不是为了什么,我只是好奇


    干杯,加里对我来说很好。如果你对这些对象所做的只是从它们中打印一些东西,你可能可以在一个循环中用更少的初始化之类的方式来完成,但是如果这只是一个测试……看起来不错。

    对我来说不错。如果您对对象所做的只是从对象中打印一些内容,那么您可能可以在一个循环中使用较少的初始化之类的操作,但如果这只是一个测试,它看起来很好。

    看不出这样做有什么明显的错误。一个建议是为您的行星类提供一个扩展的初始化器,大致如下:

    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];
    
    然后通过以下方式创建行星:

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

    我看不出这样做有什么严重的错误。一个建议是为您的行星类提供一个扩展的初始化器,大致如下:

    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];
    
    然后通过以下方式创建行星:

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

    我没有想到这一点,我也在看KVC,所以我在循环中设置IVAR。这是一个非常好的观点,谢谢。我没有想到这一点,我也在看KVC,所以这就是为什么我在循环中设置IVAR。这是一个非常好的观点,谢谢。