UIViewController和UIview dealloc没有被调用

我有一个基于导航的视图控制器,在视图控制器中我隐藏了顶部导航栏并使用自定义UIView作为导航栏.

UIView栏有一个后退按钮,我使用Delegate方法(我声明了一个协议)在后退按钮被预设时与视图控制器通信.

我在CustomNavigation Bar中使用委托
id代表;

并在主视图控制器中,当我分配导航栏时,我设置了委托

topBar = [[TopNavigationBar alloc] initWithFrame:CGRectMake(0,480,40)];
topBar.lblTitle.text = @"Shop";
topBar.delegate = self;

我在ViewControllers dealloc中发布了这个Bar.

现在当我按下后退按钮时,我使用委托方法调用主ViewController中的popViewController.

//in Custom Bar
-(void)Buttonpressed {
    [delegate TopNavigationBarBackButtonpressed];   
}

//In View COntroller
-(void)TopNavigationBarBackButtonpressed {

    [self.navigationController popViewControllerAnimated:YES];
}

现在ViewController是poped,控件转到上一个viewController,但是在ViewController和UIView中都没有触发dealloc

我究竟做错了什么?

解决方法

好!终于明白了问题所在.

是的,是代表.所以在我的“后退按钮按下”方法中,我需要将委托设置为NIL.

-(void)TopNavigationBarBackButtonpressed {

 topBar.delegate = nil;
[self.navigationController popViewControllerAnimated:YES];
}

瞧,所有的dealloc都被称为.该死的你自定义协议.我生命的2天永远不会回来.

编辑:
确定无需将委托设置为nil.

我遇到了所有的问题,因为我在保留代表的财产.

@property(nonatomic,retain)id <ASNavigationDelegate>delegate;

这应该是

@property(assign)id <ASNavigationDelegate> delegate;

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...