为什么这段代码会导致内存泄漏?

时间:2014-05-26 11:36:06

标签: ios objective-c memory-management

我在applicationDidBecomeActive回调中执行此代码。

- (void)applicationDidBecomeActive:(UIApplication *)application{
     [self showMainWindow];
}


- (void) showMainWindow{
      PushNotificationTabBarController *pushNotificationTabBarController = [[PushNotificationTabBarController alloc] initWithNibName:@"PushNotificationTabBarController" bundle:nil];
      self.viewDeckController.centerController = 
          pushNotificationTabBarController; // registered for Notification via addObserver...
}

setter的定义如下:

@property (nonatomic, strong) IBOutlet UIViewController* centerController;
我的IIViewDeckController中的

AppDelegate属性:

@property (strong, nonatomic) IIViewDeckController *viewDeckController;

当我关闭并重新进入应用程序时,我发现我有2个PushNotificationTabBarController个对象,没有引用其中一个,就像内存泄漏一样。但是,我不明白为什么这个代码导致它,因为对我来说似乎没问题。我使用ARC

1 个答案:

答案 0 :(得分:-1)

在设置pushNotificationTabBarController之前检查self.viewDeckController.centerController对象。如果它存在,则释放并分配给nil并分配' pushNotificationTabBarController'

的新对象
 id controller = self.viewDeckController.centerController;
    if (controller) {
 [controller release];
  controller = nil;
}

  self.viewDeckController.centerController = pushNotificationTabBarController;