0

我正在创建一个 ios 应用程序并启用了 ARC 模式。我将 24 个实例加载到 ScrollView,但在给定时间只会显示三个视图。因此,我将删除已加载到内存中的其他不需要的实例

if((NSNull *)[viewControllers objectAtIndex:2] != [NSNull null]) {
    [viewControllers replaceObjectAtIndex:2 withObject:[NSNull null]];
    [content3.view removeFromSuperview];
    //remove third content page
    [content3 viewDidUnload];
    //set nil to instance to memory management
    content3 = nil;

    NSLog(@"Content 3 removed");
}

但是当我用分析器检查时,内存不会被释放,它只是自动增加。

谁能给我一些关于这个问题的提示?

谢谢

4

1 回答 1

0

我认为您的代码中存在很多问题:

  1. 一个重要问题是,您正在调用委托方法viewDidUnload。永远不要尝试做这样的事情,否则你会在你的应用程序中遇到奇怪的行为。
  2. 如果您需要从内存中删除一个对象,只需将其设置为 nil。
  3. 我认为您的 if 条件永远不会起作用,为什么要将其类型转换为 NSNull ?

检查此代码:

if([viewControllers objectAtIndex:2] != [NSNull null])
{
    [viewControllers replaceObjectAtIndex:2 withObject:[NSNull null]];
    [content3.view removeFromSuperview];
    content3 = nil;
    NSLog(@"Content 3 removed");
}
于 2013-02-07T06:05:18.093 回答