Ios 从ViewDidDisplay调用presentViewController会导致ViewController泄漏

Ios 从ViewDidDisplay调用presentViewController会导致ViewController泄漏,ios,objective-c,ios7,Ios,Objective C,Ios7,我有三个UIViewController派生的类实例A、B、C A:是一个带有单个按钮的视图,该按钮链接到buttonPressed和以下非标准代码 -(IBAction)buttonPressed { B = new local object of class B code left out for brevity B.dismissDelegate = self; [self presentViewController:B

我有三个UIViewController派生的类实例A、B、C

A:是一个带有单个按钮的视图,该按钮链接到buttonPressed和以下非标准代码

-(IBAction)buttonPressed {
    B = new local object of class B code left out for brevity
    B.dismissDelegate = self;
    [self presentViewController:B
                       animated:NO
                     completion:nil];
}
- (void)dismiss {
    [self dismissViewControllerAnimated:NO completion:nil];
}
- (void)viewDidAppear {
    C = new local object of class C code left out for brevity
    C.dismissDelegate = self;
    [self presentViewController:C
                       animated:NO
                     completion:nil];       
}
- (void)dismiss {
    [self.dismissDelegate dismiss];
}
B:是具有以下非标准代码的视图

-(IBAction)buttonPressed {
    B = new local object of class B code left out for brevity
    B.dismissDelegate = self;
    [self presentViewController:B
                       animated:NO
                     completion:nil];
}
- (void)dismiss {
    [self dismissViewControllerAnimated:NO completion:nil];
}
- (void)viewDidAppear {
    C = new local object of class C code left out for brevity
    C.dismissDelegate = self;
    [self presentViewController:C
                       animated:NO
                     completion:nil];       
}
- (void)dismiss {
    [self.dismissDelegate dismiss];
}
C:是一个有一个按钮链接到按钮按下的视图

-(IBAction)buttonPressed {
    [self.dismissDelegate dismiss];
}
反复按下A上的按钮,然后按下C上的按钮,将分配C的多个副本,这些副本将永远不会释放。但是,如果B被删除,A只启动C,则C的副本将被释放


ARC已打开。

如何声明委托属性?它是弱的还是强的?委托被声明为强的,但当声明为weakI时,行为仍然存在。weakI刚刚创建了一个简单的应用程序,它复制了您在这里显示的内容,并且不会泄漏。我在ViewController B的解除锁定中添加了一个NSLog,一旦VC C被解除,VC B就被解除锁定,因此您的问题一定与您在此处未显示的内容有关。不过,你可能会遇到更大的问题,因为该应用程序在iOS 8下崩溃,试图关闭未提供的模型VC。然而,VC C中的强委托属性确实导致了泄漏