在内存警告期间,我执行以下操作:
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
if ([self isViewLoaded] && [self.view window] == nil) {
self.restaurantsTableView = nil;
self.restaurantFecther = nil;
self.bgImageView = nil;
self.menuFetcher = nil;
self.searchBar = nil;
self.searchBarDisplayContr = nil;
self.feed = nil;
self.searchResults = nil;
self.locationManager = nil;
self.restaurantsMap = nil;
self.myImage = nil;
self.rDetailsVC = nil;
self.introVC = nil;
self.SubclassVC = nil;
self.view = nil;
}
}
这似乎工作正常,但是当我返回到该视图时,它的所有属性都被设置为nil,加上视图,我收到以下警告:
The top layout guide length constraint unexpectedly lost its container. Did the application remove all constraints from the view controller's view (which would be an app error)?
The bottom layout guide length constraint unexpectedly lost its container. Did the application remove all constraints from the view controller's view (which would be an app error)?
我如何解决这个问题,所以我没有得到这些警告,是上面的代码,是处理内存警告的正确方法吗?
答案 0 :(得分:0)
仅设置为nil可以重新创建的项目。然后你需要检查nil并根据需要重新创建。
在中释放你的记忆之后再打电话给[super didReceiveMemoryWarning]
。
答案 1 :(得分:0)
你不应该摧毁didReceiveMemoryWarning
中的所有内容,就像你在这里一样。你应该只生成非必要的零碎。您尤其不希望将未明确创建的任何内容设置为nil,例如self.view
。
处理此问题的最佳方法是使每个以编程方式创建的视图延迟加载,并且只有在屏幕上不可见时才将它们设置为nil(IE用户当前正在查看另一个视图控制器)。
但是,我怀疑你的观点是这里的记忆问题。我会担心你的数据收集。