发布ViewControllers与UITabBarController与ARC相关联

时间:2016-05-02 15:38:44

标签: ios objective-c uinavigationcontroller uitabbarcontroller dealloc

我正在申请工作,我有以下种类的结构

-UINavigationController (MAIN NAVIGATION CONTROLLER)
--UIViewController
---UITabBarController
     -- UINavigationController1
     ---- UITableViewController1

     -- UINavigationController2
     ---- UITableViewController2

     -- UIViewController ( Logout Button is in this Controller )

现在我调用以下方法将用户注销到First ViewController

[self.navigationController popToRootViewControllerAnimated:YES];

这里是self.navigationController =(MAIN NAVIGATION CONTROLLER)

但是这段代码不起作用,它不会在控制器下面。

-- UINavigationController1
---- UITableViewController1

-- UINavigationController2
---- UITableViewController2

我正在使用ARC,所以我不能为所有控制器调用release方法,所以我怎样才能实现这一点。

更新

这是我的推送代码:

//Property Declare in AppDelegate
@property (nonatomic,weak) UITabBarController *tabBarControllerRef;

// Below code Written in RootViewController of (MAIN NAVIGATION CONTROLLER)
-(void)moveToContentScreen { 
AppDelegate *delegateRef = (AppDelegate *) [UIApplication sharedApplication].delegate;
delegateRef.tabBarControllerRef = [self.storyboard instantiateViewControllerWithIdentifier:@"tabbarReference"];
if (delegateRef.tabBarControllerRef) {
    [self.navigationController pushViewController:delegateRef.tabBarControllerRef animated:YES];
}
}

2 个答案:

答案 0 :(得分:0)

这里几乎可以肯定的是,你有一个强大的参考周期;两个(或更多)对象,每个对象都在一个循环中保存对其他对象的强引用,因此不能删除它们。例如,UITabBarController是否具有对其封闭视图的强引用?如果是这样,请至少使其中一个参考弱,以打破周期。

如果通过查看哪些对象可能周期性地相互引用而不明显,您可以使用Instruments来尝试找到它们;有an excellent tutorial here,"强参考周期"部分讨论了这种问题。

答案 1 :(得分:0)

UIViewController如何呈现UITabBarController?父/子?如果是这样,看起来第一个UIViewController视图控制器仍然保留对UITabBarController的引用。在您的图表中,看起来初始UINavigationController只有一个被推UIViewController,根推。{/ p>