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

时间:2014-11-03 16:26:02

标签: objective-c variables sprite-kit declaration sknode

让我解释一下我的意思:

我需要根据通过该方法传递的值声明并初始化一个x个SKNode变量(1到15之间):

- (instancetype)initWithNumberOfNodes:(int)number;

每个SKNode都会被添加到NSMutableArray中,所以我不会有引用问题(我将使用[myArray objectAtIndex:]获得每个项目)。我不认为创建15个SKNode变量可能是最好的解决方案,因为内存浪费大,编程风格奇怪。

任何线索?

1 个答案:

答案 0 :(得分: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];