【发布时间】:2012-03-25 06:48:15
【问题描述】:
我有一个 UIViewController,它从 iPhone 上的导航堆栈中弹出,并由 iPad 上的 setRootViewController 删除。
在这两种情况下,UIViewController 都无法解除分配,这意味着有东西挂在它上面;这可以通过记录 [self retainCount] 来确认,它是两个,就在 pop 或 setRootViewController 之前(出于某种原因,它在 ViewWillDisappear 中是四个)。
UIView 有音频(使用 Flite Text to Speech - 使用 AVFoundation.framework)和动画。
我应该寻找什么可以增加我在视图控制器中的保留计数并阻止视图控制器被礼貌地释放,因为它应该是。
以下是视图被推送到视图堆栈或设置为 RootViewController 的方式;
-(IBAction)pushShare:(id)sender{
ShareViewController *shareViewController = [[ShareViewController alloc] initWithNibName:@"ShareViewController" bundle:nil];
NSLog(@"1. SVC Retain count %d", [shareViewController retainCount]);
[shareViewController setParentIsIpadMake:YES];
NSLog(@"2. SVC Retain count %d", [shareViewController retainCount]);
[shareViewController setStory:story];
NSLog(@"3. SVC Retain count %d", [shareViewController retainCount]);
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
StoryBotAppDelegate *appDelegate = (StoryBotAppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate.window setRootViewController:shareViewController];
NSLog(@"4. SVC Retain count %d", [shareViewController retainCount]);
} else{
[self.navigationController pushViewController:shareViewController animated:YES];
NSLog(@"4. SVC Retain count %d", [shareViewController retainCount]);
}
NSLog(@"releasing Svc...");
[shareViewController release];
NSLog(@"5. SVC Retain count %d", [shareViewController retainCount]);
}
【问题讨论】:
-
它是如何创建并推送到导航栈的?
-
我已经为你更新了问题@KrisVanBael
-
另外,你怎么知道它没有被释放?您的视图控制器可能已解除分配。在这种情况下,内存被释放用于其他事情并且询问其保留计数基本上可以返回任何内容。
-
我在 dealloc 中有一个没有记录的 NSLog
标签: objective-c ios memory-management uiviewcontroller dealloc