0

让我解释一下我的意思:

我需要根据通过方法传递的值来声明和初始化 x 个 SKNode 变量(介于 1 和 15 之间):

- (instancetype)initWithNumberOfNodes:(int)number;

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

有什么线索吗?

4

1 回答 1

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];
于 2014-11-03T16:44:17.473 回答