使用ARC弹出viewcontroller后,内存无法释放

时间:2013-07-03 14:45:48

标签: ios objective-c cocoa-touch automatic-ref-counting

您好我的项目是基于ARC的,我正在使用UINavigationController在ViewController之间进行转换。我正在使用分析器来分析场景背后发生的事情。我注意到,当我按下一个ViewController时,它会为所有组件分配内存,当我弹出它时,它不会释放分配的内存。

由于我使用ARC,因此我无法实现dealloc或释放任何组件。我已经详细分析过,我的项目中没有内存泄漏。

我没有使用任何强大的属性来推送viewController。以下是我推动ViewController的方法。

viewController *obj = [[viewController alloc] init];
[self.navigationController pushViewController:obj animated:NO];

有任何线索发生了什么? 我该怎么做才能释放我消耗的记忆。 请指教

1 个答案:

答案 0 :(得分:0)

您的描述表明您有一个保留周期,这会导致对象无法解除分配。保留周期的典型来源是通过加载NIB文件(通常声明为IBOutlet)分配的属性。

打破它们并释放对象的两种策略:

  1. 将属性声明为weak

    @property (nonatomic, weak) IBOutlet UILabel *statusLabel;
    
  2. nil中将属性设置为viewDidUnload

    - (void)viewDidUnload 
    {
        self.statusLabel = nil;
        [super viewDidUnload];
    }