如何使用ARC模式管理内存



我正在创建一个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");
}

但当我向探查器检查时,内存不会被释放,只是会自动增加。

有人能给我一些关于这个问题的建议吗?

感谢

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

  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");
}

最新更新