Objective c 为什么当ARC为项目打开但为特定文件目标c关闭时,不调用dealloc?
我的一个视图控制器已关闭,但当我导航到上一个视图控制器时,没有调用我的dealloc方法 对于我使用的push view控制器Objective c 为什么当ARC为项目打开但为特定文件目标c关闭时,不调用dealloc?,objective-c,ios,Objective C,Ios,我的一个视图控制器已关闭,但当我导航到上一个视图控制器时,没有调用我的dealloc方法 对于我使用的push view控制器 Magazine_ArticleViewController_iPhone *viewController = [[Magazine_ArticleViewController_iPhone alloc] initWithNibName:@"Magazin
Magazine_ArticleViewController_iPhone *viewController = [[Magazine_ArticleViewController_iPhone alloc]
initWithNibName:@"Magazine_ArticleViewController_iPhone"
bundle:[NSBundle mainBundle]];
viewController.hidesBottomBarWhenPushed = YES;
IssueDataHolder *dataHolder = [m_arrIssueData objectAtIndex:m_nCurrentIssueIndex];
NSLog(@"%d",dataHolder.nIssueID);
[viewController setM_IssueDataHolder:dataHolder];
[self.navigationController pushViewController:viewController animated:YES];
[viewController release];
[self.navigationController popViewControllerAnimated:YES];
并导航我以前使用的视图控制器
Magazine_ArticleViewController_iPhone *viewController = [[Magazine_ArticleViewController_iPhone alloc]
initWithNibName:@"Magazine_ArticleViewController_iPhone"
bundle:[NSBundle mainBundle]];
viewController.hidesBottomBarWhenPushed = YES;
IssueDataHolder *dataHolder = [m_arrIssueData objectAtIndex:m_nCurrentIssueIndex];
NSLog(@"%d",dataHolder.nIssueID);
[viewController setM_IssueDataHolder:dataHolder];
[self.navigationController pushViewController:viewController animated:YES];
[viewController release];
[self.navigationController popViewControllerAnimated:YES];
对于仍有问题的开发人员,dealloc未被调用且无法找到原因: 根据Paul的回答,
[performSelector:withObject:afterDelay:][/code>可能是这个问题的原因。
在按下新的ViewController之前,必须取消[performSelector://code>
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(Method) object:nil];
我的Magazine\u ArticleViewController\u iPhone viewcontroller的dealloc没有被调用,因为在viewcontroller中(我正在推Magazine\u ArticleViewController\u iPhone viewcontroller),我接受了一个具有retain属性的委托。当我做了"分配"后,dealloc就被解雇了
我完全同意保罗·德兰格的评论
已将代理的保留属性更改为分配请立即查看更新的问题?某些内容包含对视图控制器的强引用。可能在早期的类中,ARC处于启用状态,因此当PushViewController时,我们不会释放推送的视图控制器对象的内存,也许这就是为什么在推送视图控制器中没有调用dealloc的原因不是这样的。Paul是对的,你的问题毫无疑问地存在于这样一个事实中,即某些东西对你的视图控制器有很强的引用。这个问题可能与弧v非弧无关。我在sloppyNSTimer
代码中看到过,但是很多东西都会导致控制器被保留。您可以首先查找未解除分配的视图控制器可能正在将对自身的引用(self
)传递给其他方法的情况。只需发布任何可疑的Magazine\u Article ViewController\u iPhone
代码。这只是在选择器的发送尚未执行的情况下发生的吗?我认为,是的,如果存在一个方法,该方法将在延迟一段时间后使用选择器执行,并且在该方法之前推送另一个ViewController,则不会调用dealoc。