在 往CCLayer裡面加 Notification通知的時候,一定要加在OnEnter和OnExit裡面,不要加在init和 dealloc上面,因為
很多時候CCLayer是通過node方法產生的,在切換layer的時候,dealloc不一定會調用,這樣會導致一個layer多次註冊一個通知,這樣導致,如果發送一個通知,會多次調用通知響應函數,導致問題,切記。
例子代碼如下:
-(void) onEnter{ //註冊新玩家讀取通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onReloadPlayerVec:) name:Str_NSNotification_FetchPlayerChairInfo object:nil]; //註冊新使用者基本資料通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onNewUserBasicInfo:) name:Str_NSNotification_NewUserBasicInfo object:nil]; //註冊新使用者其他資料通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onNewUserOtherInfo:) name:Str_NSNotification_NewUserOtherInfo object:nil]; //註冊玩家退出當前桌子的通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onPlayerExitTable:) name:Str_NSNotification_PlayerExitTable object:nil]; //註冊 公聊 訊息 通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onPublicMsg:) name:Str_NSNotification_PublicMsg object:nil]; [super onEnter];}- (void) onExit{ [[NSNotificationCenter defaultCenter] removeObserver:self name:Str_NSNotification_FetchPlayerChairInfo object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self name:Str_NSNotification_NewUserBasicInfo object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self name:Str_NSNotification_NewUserOtherInfo object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self name:Str_NSNotification_PlayerExitTable object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self name:Str_NSNotification_PublicMsg object:nil]; [self clearUp]; [super onExit];}