didReceiveMemoryWarning

didReceiveMemoryWarning

我的UIViewController之一有几个子视图控制器。通过将NSObject拖到左侧的“Objects”部分,然后将我自己的SpecialViewController放入“Custom Class”,可以在界面生成器中构建它们。通过此设置,在viewDidLoad上,我将获得我的视图和控制器。以下屏幕截图建议了工作流程:

在我的实现中,我有:

@interface ParentController : UIViewController
{
     SpecialViewController *svc;
}
@property (nonatomic, retain) IBOutlet SpecialViewController *svc;

据我了解,在didReceiveMemoryWarning期间,我应该释放自己的资源。然后在IBOutlets期间将viewDidUnload设置为nil。

在模拟器中模拟内存不足时,调试器会暂停didReceiveMemoryWarningSpecialViewController(其主体只是[super didReceiveMemoryWarning];),出现错误EXC_BAD_ACCESS (code=1, address=0xe0000008),从而导致崩溃。目前,父控制器不可见,因此可以安全地释放它。

父控制器也仅在[super didReceiveMemoryWarning];中包含didReceiveMemoryWarning。我在这两个类中都尝试过niling IBOutlets。它没有帮助。

知道为什么会这样吗?

我的目标是使用ARC的iOS 4和5。 SpecialViewControllerUITableViewController的子类。

通过跟踪,我发现ParentController didReceiveMemoryWarningSpecialViewController之前被调用。

最佳答案

似乎您在这里有一个视图控制器。您选择创建此类有什么特殊原因吗?以我的经验,每个UIViewController应该是一个单独的子类。基于您的错误出现在didReceiveMemoryWarning中这一事实,我认为问题出在其他地方。您可以共享此View Controller的初始化代码吗?

如果尝试使用类似UIViewController Containment的方法,则可能应该查看涵盖此过程的WWDC主题。

关于iphone - 正确处理didReceiveMemoryWarning,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10429235/

10-11 21:36