【发布时间】:2012-05-03 10:08:33
【问题描述】:
我的一个UIViewController 有几个子视图控制器。它们是在界面构建器中构建的,通过将NSObject 拖到左侧的“对象”部分,然后将我自己的SpecialViewController 作为“自定义类”放入。通过此设置,在viewDidLoad 上,我将准备好我的视图和控制器。以下屏幕截图建议了工作流程:
在我的实现中,我有:
@interface ParentController : UIViewController
{
SpecialViewController *svc;
}
@property (nonatomic, retain) IBOutlet SpecialViewController *svc;
据我了解,在didReceiveMemoryWarning 期间,我应该释放自己的资源。然后在viewDidUnload 期间将IBOutlets 设置为nil。
在模拟器中模拟低内存时出现崩溃,调试器在SpecialViewController 的didReceiveMemoryWarning 处暂停(其主体只是[super didReceiveMemoryWarning];),并出现错误EXC_BAD_ACCESS (code=1, address=0xe0000008)。此时父控制器是不可见的,因此可以安全释放。
父控制器在didReceiveMemoryWarning 中也只包含[super didReceiveMemoryWarning];。我在两个班级都试过 niling IBOutlets。它没有帮助。
知道为什么会这样吗?
我的目标是带有 ARC 的 iOS 4 和 5。 SpecialViewController 是 UITableViewController 的子类。
通过追踪发现ParentController didReceiveMemoryWarning在SpecialViewController之前被调用。
【问题讨论】:
-
释放对象和设置对象为零不相等。如果你发现内存警告,你必须释放 unused 资源。先尝试
[svc release]。 -
@Feo,嗯...我正在使用 ARC。我确实释放了未使用的资源。这些是我在自己的班级中管理的,对吗?
-
你在
self.scv=nil吗? -
@JackyBoy,是的,我很肯定我这样做了。
-
你应该在
dealloc和viewDidUnload中释放并分配出口到 nil .. 你在这样做吗?
标签: iphone objective-c ios cocoa-touch memory-management