ios - 它重用以前分配的对象吗?

时间:2014-01-31 20:59:50

标签: ios objective-c

我想知道为什么我分配的对象重用了之前使用过的地址。

情景是这样的:

  • AppDelegate创建了LoginViewController(我们称之为 LOG1
  • LOG1 登录后,我创建了一个SlideNavigationController实例(我将其命名为 SN1
  • SN1 有一个初始的uiviewcontroller UVC1
  • LOG1 调用presentViewController: SN1 使 LOG1 成为 SN1 的呈现_控件(SN1.presentingViewController == LOG1) )
  • UVC1 设置为 SN1 有一个滑动菜单 MENU1
  • MENU1 有退出选项
  • MENU1 现在将创建另一个LoginViewController LOG2
  • SN1 会显示 LOG2 ,使 SN1 成为 LOG2
  • 的呈现ViewController
  • LOG2 登录后,我创建了 SN2 。因此, LOG2 SN2
  • 的presentationViewController
  • SN2 也有自己的 UVC2
  • UVC2 也设置为使 SN2 有一个滑动菜单 MENU2
  • 现在这是一个疯狂的部分
  • MENU2 的内存地址与 MENU1
  • 相同
  • MENU2 会创建 LOG3
  • 再次, LOG2 LOG3 具有相同的内存地址
  • 因此,当 SN2 呈现 LOG3 时,会出现错误,因为 LOG3 LOG2 LOG2 是presentsViewController SN2
  • 其余的是崩溃

这是用于创建/附加MenuVC到SlideNavigationController

的方法/功能
-(void)setupSlideNavigation:(SlideNavigationController *)sn
{
    MenuVC *menuVC = [[MenuVC alloc] initWithNibName:@"MenuVC" bundle:nil];

    UIBarButtonItem *leftItem = [[UIBarButtonItem alloc]
                                 initWithImage:[UIImage imageNamed:@"setting_btn_09.png"]
                                 style:UIBarButtonItemStylePlain
                                 target:nil
                                 action:nil];

    UIEdgeInsets edges = UIEdgeInsetsMake(0, -16, 0, 0);
    leftItem.imageInsets = edges;

    sn.leftMenu = menuVC;
    sn.leftbarButtonItem = leftItem;
}

UVC1 UVC2 由此设置:

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [[UIUtils sharedInstance] setupSlideNavigation:(SlideNavigationController*)self.navigationController];
}

也发生在我创建LoginViewController时:

[[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil] //called from viewDidLoad method of the MenuVC

此行为导致“应用程序尝试以模态方式呈现活动控制器”

我还使用了ios / objc / compiler

的“自动释放”机制

0 个答案:

没有答案