2014-11-03 68 views
0

讓我解釋一下我的意思是:如何在不知道有多少變量的情況下聲明和初始化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

回答

1

如果你知道你會需要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