認証iosの通知メカニズムは同期ですか?それとも非同期ですか?

1437 ワード

JavaScriptにおけるイベント・メカニズムとは異なり、iOSにおけるイベント・ブロードキャスト・メカニズムは同期されており、デフォルトでは、通知が放送され、後のコードがブロックされる.
-(void) click  
{  
    NSNotificationCenter *center =  [NSNotificationCenter defaultCenter];  
    [center postNotificationName:@"event_happend" object:self];  
          
    NSLog(@"HQ1111");  
} 
ボタンを押した後、ラジオを送ります.これまでに2つのイベントの聞き手が登録されました.
-(id) init  
{  
    self = [super init];  
    if(self){  
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(whenReceive:) name:@"event_happend" object:nil];  
    }  
    return self;  
}  
      
      
-(void) whenReceive:(NSNotification*) notification  
{  
    NSLog(@"HQ2222");  
}  
-(id) init  
{  
    self = [super init];  
    if(self){  
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(whenReceive:) name:@"event_happend" object:nil];  
    }  
    return self;  
}  
      
      
-(void) whenReceive:(NSNotification*) notification  
{  
    NSLog(@"HQ3333");  
}  
このコードを実行すると、まずHQ 2222が出力され、HQ 3333が最後にHQ 111が出力されます.デバッグで発見されたコードは、常に同じスレッド内を走っています.放送イベント後のコードは、すべてのリスナーが応答を完了するまでブロックされています.
したがって、NotificationCenterのこの特性のために、ブロードキャストされるイベントが非同期的に処理されることが望ましいなら、聞き手の方法において新しいスレッドを開く必要がある.非同期処理を実現するために、Notificationをコンポーネント間デカップリングの方式とするべきである.