正确地从视图和数组中删除对象?

时间:2012-05-27 06:13:52

标签: iphone arrays cocoa memory-management

在我的“connect4”风格游戏中,我有一个代表7x6网格的数组,数组中的每个“单元格”都包含NSNull或UIView子类'CoinView'。以下是从NSMutableArray和主视图中删除对象的正确方法吗?

- (IBAction)debugOrigin:(id)sender {
    int x = 0;
    int y = 0;
    //get the coin object form the grid
    CoinView *coin = [[grid objectAtIndex:x] objectAtIndex:y];

    //cancel if there's no coin there
    if ([coin isKindOfClass:[NSNull class]]) { return; }

    //remove the coin from memory
    [coin removeFromSuperview];
    coin = nil;
    [[grid objectAtIndex:x] setObject:[NSNull null] atIndex:y]; //will this leak?

}

谢谢!

1 个答案:

答案 0 :(得分:3)

您的代码不会泄露,实际上(几乎)正确。

你应该删除这个评论,因为你没有在你的代码中处理内存(并且最终可能会使你对代码的真正含义感到困惑):

//remove the coin from memory

在以下行中,您将从其超级视图中删除局部变量“coin”引用的视图:

[coin removeFromSuperview];

你将nil分配给你的本地变量硬币,这是一个很好的做法,以确保它在以后的代码中没有被使用:

coin = nil;

据我所知,NSMutableArray没有setObject:AtIndex:。请改用replaceObjectAtIndex:withObject:

[[grid objectAtIndex:x] replaceObjectAtIndex:y withObject:[NSNull null]]; //will this leak?

最后一点,我建议你在memory managementmemory leaks上阅读一下(来自Apple的开发者文档)。第一部分为您提供了一些提示和技巧,使内存管理更容易理解。