如何在不知道有多少变量的情况下声明和初始化n个变量?
让我解释一下我的意思是:如何在不知道有多少变量的情况下声明和初始化n个变量?
我需要声明和初始化一个数x SKNode变量基于该值通过方法传递(1到15之间):
- (instancetype)initWithNumberOfNodes:(int)number;
每SKNode将被添加到一个NSMutableArray,所以我不会有任何问题与参考(我会得到与[myArray objectAtIndex:]
每一个项目)。由于大量的内存浪费和奇怪的编程风格,我不认为创建15个SKNode变量可能是最好的解决方案。
任何线索?
如果你知道你会需要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];
谢谢:)也许是一个愚蠢的问题,由于我得到了-1票,但我真的不知道它! – user3582537 2014-11-03 18:47:33
懒惰初始化只是您最终添加到工具箱中的许多模式之一。因为你不需要用'NSNull'来填充它们('-objectForKey:'如果没有找到键则返回'nil')。 – 2014-11-03 18:56:12
你应该考虑增加节点到父SKNode,然后用parentNode.children [索引]访问节点。 – 0x141E 2014-11-04 08:39:17