在我的iOS应用程序中,当我从viewController A se到se时,使用系统内存就可以了。
但问题是当我从viewController A se到se然后再回到A并再次回到B时,这会让你的内存越来越多。
为什么在返回查看A时没有释放所有已用内存。
我正在使用自动释放池。我不再需要变量了。
注意:我在View B中使用GCD,但我也在GCD中释放内存。
我不知道为什么会发生这种情况。或者,当我在视图A中时,有没有办法完全卸载视图B使用的所有资源?
更新
我不是从B回到A.我只是使用后退按钮。
这是我从视图A中的segue
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
@autoreleasepool {
PhotosCollectionViewController *photoCollection=[segue destinationViewController];
NSIndexPath *path=[self.tableView indexPathForSelectedRow];
// get the cell tag for the selected row
NSIndexPath *path1=[NSIndexPath indexPathForRow:[path row] inSection:0];
UITableViewCell * cell = [self.tableView cellForRowAtIndexPath:path1];
[photoCollection setPassedID:[[elements objectAtIndex:path1.row] objectAtIndex:0]];
// set the title of the next view controller
[photoCollection setTitle:cell.textLabel.text];
photoCollection=nil;
path=nil;
path1=nil;
}
}
修改
我在viewDidLoad中的视图中使用的长时间运行过程
photoQueue=dispatch_queue_create("com.prepare.photos", nil);
dispatch_async(photoQueue, ^{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(goToBackground)
name:UIApplicationWillResignActiveNotification object:nil];
display_photos=[[NSMutableArray alloc] init];
// iterate through photos array and create MWPhoto object out of it
// init ns cache
//myCache=[[NSCache alloc] init];
int j=0;
for(j=0;j<[photos count];j++){
//NSLog(@"filename %@",[[photos objectAtIndex:i] objectAtIndex:0]);
MWPhoto *mw=[MWPhoto photoWithFilePath:[self.documentsDirectory stringByAppendingPathComponent:[[photos objectAtIndex:j] objectAtIndex:0]]];
[display_photos addObject:mw];
mw=nil;
}
//dispatch_release(photoQueue);
});
答案 0 :(得分:0)
回答我自己的问题。它填补内存的原因是,当我从sqlite数据库中检索到一些数据时,我关闭了sqlite连接。因此,查看新视图将重新打开数据库连接,这将导致过多的内存使用。
所以底线,不要关闭sqlite数据库连接。
答案 1 :(得分:0)
Segues加载视图控制器的新实例;因此,当您使用segue将视图控制器A导航到B时,使用segue是有意义的。
A_1 -> B_1
但是,如果您使用segue从B导航到A,则表示您正在创建视图控制器A的新实例,而不是返回到先前的视图控制器A实例。
A_1 - &gt; B_1 - &gt; A_2
来回瞄准会导致:
A_1 - &gt; B_1 - &gt; A_2 - &gt; B_2 - &gt; A_3 - &gt; ...
理想情况下,您想要的是:
A_1 - &gt; B_1 - &gt; A_1
(从B_1回到A_1)
要实现此目的,您可能希望将此方法用于从视图控制器B导航到A的按钮。
- (IBAction)backButton:(UIButton *)sender
{
[self dismissViewControllerAnimated:YES completion:^(void){
NSLog(@"View controller dismissed");
// things to do after dismissing
}];
}