1、創建通知,最好在viewDidLoad的方法中創建 2、發送通知 3、移除通知,由那個控制器創建由那個控制器移除,誰創建誰移除,最好在dealloc方法中移除,如果通知不能及時的移除掉,當下次進入該控制器時會重覆創建NSNotificationCenter,在對應方法中發送通知給上一次創建的通知 ...
1、創建通知,最好在viewDidLoad的方法中創建
- (void)viewDidLoad { [super viewDidLoad]; //創建通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tongzhi:) name:@"tongzhi" object:nil]; } //接收通知並相應的方法 - (void) tongzhi:(NSNotification *)notification{ NSDictionary *dic = notification.object; // NSLog(@"通知過來的 - dic = %@",notification.object); }
2、發送通知
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"324234",@"bankId",@"某某銀行",@"bankName", nil]; //通過通知中心發送通知 [[NSNotificationCenter defaultCenter] postNotificationName:@"tongzhi" object:dic];
3、移除通知,由那個控制器創建由那個控制器移除,誰創建誰移除,最好在dealloc方法中移除,如果通知不能及時的移除掉,當下次進入該控制器時會重覆創建NSNotificationCenter,在對應方法中發送通知給上一次創建的通知,但是上一個通知所在的控制器已被幹掉,所以這時候就會報錯
-(void)dealloc{ //第一種方法.這裡可以移除該控制器下的所有通知 // 移除當前所有通知 NSLog(@"移除了所有的通知"); [[NSNotificationCenter defaultCenter] removeObserver:self]; //第二種方法.這裡可以移除該控制器下名稱為tongzhi的通知 //移除名稱為tongzhi的那個通知 NSLog(@"移除了名稱為tongzhi的通知"); [[NSNotificationCenter defaultCenter] removeObserver:self name:@"tongzhi" object:nil]; }
這裡註意:如果dealloc方法不調用,說明當前有變數沒有被釋放,這時如果找不到問題所在,也可以重寫控制器的返回按鈕backBarButtonItem事件,在返回的時候進行移除通知操作
//返回上一層界面事件 -(void)backPreviousViewControllerAction{ //第一種方法.這裡可以移除該控制器下的所有通知 // 移除當前所有通知 NSLog(@"移除了所有的通知"); [[NSNotificationCenter defaultCenter] removeObserver:self]; //第二種方法.這裡可以移除該控制器下名稱為tongzhi的通知 //移除名稱為tongzhi的那個通知 NSLog(@"移除了名稱為tongzhi的通知"); [[NSNotificationCenter defaultCenter] removeObserver:self name:@"tongzhi" object:nil]; // 返回上一層界面 [self.navigationController popViewControllerAnimated:YES]; }