如何在不知道有多少变量的情况下声明和初始化n个变量?

问题描述:

让我解释一下我的意思是:如何在不知道有多少变量的情况下声明和初始化n个变量?

我需要声明和初始化一个数x SKNode变量基于该值通过方法传递(1到15之间):

- (instancetype)initWithNumberOfNodes:(int)number; 

每SKNode将被添加到一个NSMutableArray,所以我不会有任何问题与参考(我会得到与[myArray objectAtIndex:]每一个项目)。由于大量的内存浪费和奇怪的编程风格,我不认为创建15个SKNode变量可能是最好的解决方案。

任何线索?

+0

你应该考虑增加节点到父SKNode,然后用parentNode.children [索引]访问节点。 – 0x141E 2014-11-04 08:39:17

如果你知道你会需要15或任何number是,你可以存储在一个属性:

@property (nonatomic, assign) NSUInteger number; 

- (instancetype)initWithNumberOfNodes:(int)number { 
    // ... normal stuff ... 

     self.number = number; 
     self.nodes = [NSMutableArray arrayWithCapacity:number]; 

     // Populate with placeholders to avoid out of bounds access later. 
     for (int i = 0; i < number; ++i) { 
      self.nodes[i] = [NSNull null]; 
     } 

    // ... normal stuff ... 
} 

然后,写自己的小帮手懒洋洋地创建它们。

- (SKNode*)nodeAtIndex:(NSUInteger)index { 
    NSAssert(index < self.number, @"bad index"); 

    SKNode* node = [self.nodes objectAtIndex:index]; 
    if ([node isKindOfClass:[NSNull class]]) { 
     node = [[SKNode alloc] init]; // Or whatever. 
     [self.nodes replaceObjectAtIndex:index withObject:node]; 
    } 
    return node; 
} 

,每当你需要一个节点使用您的助手:

SKNode* someNode = [self nodeAtIndex:someIndex]; 
+0

谢谢:)也许是一个愚蠢的问题,由于我得到了-1票,但我真的不知道它! – user3582537 2014-11-03 18:47:33

+0

懒惰初始化只是您最终添加到工具箱中的许多模式之一。因为你不需要用'NSNull'来填充它们('-objectForKey:'如果没有找到键则返回'nil')。 – 2014-11-03 18:56:12