我对ARC有一个小问题,我理解为什么它会做它做的但不是如何防止它。此代码是示例“Tick tac toe”游戏的一部分。
问题是在名为UIView
的子循环中分配新的Tile
。设置完成后,我会将Tile
(UIView
)添加到当前视图中,然后将其添加到游戏控制器数组中,以供参考。
现在的问题是,在循环的每次迭代中,tile对象都会自动释放,我希望它们被保留,以便我可以将它们存储在gamecontroler的tile容器中。如何让它记住瓷砖?
这是gameDelegate上的代码:
- (void) addTile:(Tile *)tile {
NSLog(@"Add tile %@", self.tiles);
[tiles addObject:tile];
}
最后一次添加的输出在这里:
Posted on pastebin.com for better formatting
此时,正如预期的那样,游戏控制器内的整个局部磁贴阵列将被输出,这是预期的;有一个包含Tile对象的列表。
这是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];
}
// ...
}
// ...
}
答案 0 :(得分:1)
ARC不是问题所在。例如,超级视图(self
)在使用以下内容添加切片时保留切片:
[self addSubview:tile];
确认gameDelegate
行nil
不是[self.gameDelegate addTile:tile];
:
{{1}}
并且实际上它将瓦片添加到数组中。