0

我正在尝试NSArray使用 for 循环遍历一个。结果仅返回数组中的最后一个值,即使 int 变量i打印正确(0,1,2...)。

另外,如果我将迭代设置为5,我将得到数组中的第 6 个对象,这是正确的。我这样做是为了缩小可能原因的范围。

有任何想法吗?

int i;
int j;
Buffer *vocalBuffer; 
for (i=0; i < numberOfBuffers; i++){ // loop through every vocal buffer

    Buffer *mixedBuffer = [[Buffer alloc] init];
    int array[sizeLoopBuff];
    mixedBuffer.buffer = array;
    mixedBuffer.numFrames = sizeLoopBuff;
    NSLog(@"Vocal buffer number --> %i", i);
    NSInteger iteration = i;
    vocalBuffer = [arrayOfVocalBuffers objectAtIndex:iteration]; // grab the vocal buffer

    for (j=0; j < sizeLoopBuff; j++){ // run through a beat loop cycle.
        mixedBuffer.buffer[j] = loopBuffer.buffer[j]; // add the beats to return buffer.
        if (j > insertPoint && j < insertPoint+ vocalBuffer.numFrames){
            mixedBuffer.buffer[j] = loopBuffer.buffer[j] + vocalBuffer.buffer[j-insertPoint];
        }
    }
    [mutArray addObject:mixedBuffer];
}
4

1 回答 1

2

正如评论中所指出的,使用指向堆栈存储的指针存在一些问题。一个是当它在范围内时,它的内容会被循环中的每次使用覆盖;具有指向它的指针的单个对象没有唯一的副本。

另一个问题是,一旦方法返回并且不需要它的堆栈空间(就运行时而言),就无法预测该空间将做什么。

每个对象都有一个唯一缓冲区的必要行为表明,对象应该在创建时动态分配自己的缓冲区。

于 2012-06-23T16:00:54.263 回答