0

想象一下,我有一个主视图,其中我调用了“AddSubview”方法,如下所示:

[mainView addsubview:secondView];

...在第二个视图中,我有一个 searchBar,带有适当的代码来显示 UIkeyboard,输入一些文本,在应用程序中使用这个,最后关闭 UIkeyboard。好的。

当这部分程序完成后,我再次调用“AddSubview”方法,如下所示:

[secondView removeFromSuperview];
[mainView addsubview:thirdView];

完成后,第二个视图消失,并被第三个视图取代。但是...第二个视图使用的内存没有被释放。而且,更重要的是,UIkeyboard 使用的内存(大约 800 Ko)在我退出应用程序之前不会被释放,即使我用第三个视图替换第二个视图,它仍然保持活动状态。

那么,有没有办法正确释放 UIkeyboard 使用的内存?

(精度:在上面的代码中,3个UIviews都在名为ManView、SecondView和ThirdView的3个类文件中子类化,分别对应NIB文件中的3个UIviews对象。在每个文件中我都放了“dealloc”方法. 但是,显然,它从未被调用过......)

4

2 回答 2

1

您如何创建 secondView .. 当您添加 subView 时,它会保留,而当您删除它时,它会自行释放。

在创建 secondView 时尝试使用 Autorelease。或从超级视图中删除后释放 secondView .... 在释放视图之前检查视图是否为零。因此,如果它已被释放,它不会使应用程序崩溃。

于 2010-09-24T15:37:47.320 回答
0

正如 KiranThorat 指出的那样, addSubview 保留视图,因此请确保您自己正确释放它。确保您的视图在 dealloc 方法等中释放任何子视图。

另外,在模拟器上检查泄漏时,我发现看到一些 UIKeyboard 泄漏是正常的。这些在设备上不存在(至少在我的情况下)。

于 2010-09-24T16:38:19.123 回答