0

我以前从来没有遇到过这样的问题。现在我不知道如何处理这个问题,希望能得到一些帮助。

我正在将视图控制器(比如说 exampleViewController)推送到导航控制器。在 viewdidload 上的 exampleViewController 中,我添加了一个带有图像的 imageview。在 dealloc 上,我从 superview 中删除了这个 imageview,然后释放任何保留的视图。仪器泄漏工具没有显示任何泄漏,但是当我打开仪器-“活动监视器”然后我看到当我推动我的 exampleViewController 时,实际内存增加了 5 MB,当我弹出我的 exampleViewController 时,内存只减少了 3 MB .. 因此,如果我多次推送并弹出此 exampleViewController,我会收到内存警告,然后该应用程序退出。

我肯定做错了什么,因为其他视图控制器的行为符合预期。所以问题是我不知道我做错了什么,希望你们提出一些方法来找出导致这种情况的原因。

我已经尝试了一些工具中的一些工具,比如 alloc 工具,然后标记堆,以及一些类似的东西,但这并没有显示出什么被泄露:/

提前致谢!!

编辑:

现在,当在仪器中标记堆时,executeFetchRequest:似乎正在泄漏,我做错了什么吗?

+ (Question *)getQuestionWithId:(NSString *)questionId

{ 问题 *resultQuestion = nil;

AppDelegate *appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
//geting context from appdelegate
NSManagedObjectContext *context = appDelegate.managedObjectContext;

//form fetch request with predicate
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Question" 
                                          inManagedObjectContext:context];

NSPredicate *query = [NSPredicate predicateWithFormat:@"questionId=%@",questionId];
NSPredicate *query1 = [NSPredicate predicateWithFormat:@"type='ke'"];

NSPredicate *predicates = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:query,query1, nil]];
[fetchRequest setPredicate:predicates];
[fetchRequest setEntity:entity];

NSError *error = nil;
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

[fetchRequest release];
resultQuestion = [fetchedObjects lastObject];

return resultQuestion;

}

4

2 回答 2

0

...在 dealloc 上,我从 superview 中删除了这个 imageview ...

永远不要在 中这样做-(void)dealloc,因为这种方法应该用于内存管理。

删除 imageview-(void)viewWillDissappear代替(如果你真的需要这个)。至于您的问题,请阅读此内容,我相信您的问题超出了您所谈论的 imageView 的范围。

于 2012-07-24T14:21:02.467 回答
0

可能是,如果您的图像加载了 imageNamed,则缓存不会在 dealloc 上清空。您是否尝试过加载图像 UIImage *image = [UIImage imageWithContentsOfFile:path];

而不是使用

myImageView.image = [UIImage imageNamed:@"someImage.png"]

当然,这可能仅有助于“如果”您使用 imageNamed。

于 2012-07-24T14:24:53.267 回答