ARC(iOS)自动发布问题

时间:2012-02-26 17:09:52

标签: ios memory-management automatic-ref-counting

我对ARC有一个小问题,我理解为什么它会做它做的但不是如何防止它。此代码是示例“Tick tac toe”游戏的一部分。

问题是在名为UIView的子循环中分配新的Tile。设置完成后,我会将TileUIView)添加到当前视图中,然后将其添加到游戏控制器数组中,以供参考。

现在的问题是,在循环的每次迭代中,tile对象都会自动释放,我希望它们被保留,以便我可以将它们存储在gamecontroler的tile容器中。如何让它记住瓷砖?

这是gameDelegate上的代码:

- (void) addTile:(Tile *)tile {
    NSLog(@"Add tile %@", self.tiles);
    [tiles addObject:tile];
}

最后一次添加的输出在这里:

Posted on pastebin.com for better formatting

此时,正如预期的那样,游戏控制器内的整个局部磁贴阵列将被输出,这是预期的;有一个包含Tile对象的列表。

New download link

这是board.m中的代码(UIView的子类)。

-(void) drawBoard
{
    NSLog(@"Drawboard called");

    for (int j =0; j < 3; j++) {
        for (int i = 0; i < 3; i++) {
            CGRect frame = CGRectMake(tilex, tiley, hlineDistance-1, vlineDistance-1);
            Tile* tile = [[Tile alloc] initWithFrame:frame];
            [self addSubview:tile];
            // ...
            [self.gameDelegate addTile:tile];
        }
        // ...
    }
    // ...
}

1 个答案:

答案 0 :(得分:1)

ARC不是问题所在。例如,超级视图(self)在使用以下内容添加切片时保留切片:

[self addSubview:tile];

确认gameDelegatenil不是[self.gameDelegate addTile:tile];

{{1}}

并且实际上它将瓦片添加到数组中。