Objective c 为什么当ARC为项目打开但为特定文件目标c关闭时,不调用dealloc?

Objective c 为什么当ARC为项目打开但为特定文件目标c关闭时,不调用dealloc?,objective-c,ios,Objective C,Ios,我的一个视图控制器已关闭,但当我导航到上一个视图控制器时,没有调用我的dealloc方法 对于我使用的push view控制器 Magazine_ArticleViewController_iPhone *viewController = [[Magazine_ArticleViewController_iPhone alloc] initWithNibName:@"Magazin

我的一个视图控制器已关闭,但当我导航到上一个视图控制器时,没有调用我的dealloc方法

对于我使用的push view控制器

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非弧无关。我在sloppy
NSTimer
代码中看到过,但是很多东西都会导致控制器被保留。您可以首先查找未解除分配的视图控制器可能正在将对自身的引用(
self
)传递给其他方法的情况。只需发布任何可疑的
Magazine\u Article ViewController\u iPhone
代码。这只是在选择器的发送尚未执行的情况下发生的吗?我认为,是的,如果存在一个方法,该方法将在延迟一段时间后使用选择器执行,并且在该方法之前推送另一个ViewController,则不会调用dealoc。