让我解释一下我的意思:
我需要声明并初始化一个数量为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];