非同期処理での、処理完了通知の出しかた。
方法1 Notificationを使う
1,Notificationの登録
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(Receive:) name:nil object:nil];
[受け取り側]上記記載を行う事で、どっかしらでNotificationに通知を出したらReceive:が呼ばれるように登録しました。
2,Notificationの通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"HOGE" object:nil];
[送る側]上記記載を通知したい側に記載する事で、"HOGE"という通知を行います。
3,Notificationの受信
- (void)Receive:(NSNotification *)receiveNotification{
if( [receiveNotification name] == @"HOGE" ){
// Notifocationの登録解除
[[NSNotificationCenter defaultCenter] removeObserver:self name:nil object:nil];
}
}
[受け取る側]通知で使われるNotifocationNameが"HOGE"だった場合のみ、動作させます。
受信し終わったらNotificationの登録を解除します。
方法2 DelegateとSelectorを渡す。
1, 非同期の関数を呼ぶ際に一緒にDelegateとSelectorを渡す。
[hoge HogeSend:@"test" delegate:self selector:@selector(test:)];
-(void) test : (NSString*)str {
}
2,非同期処理で処理が終わった事を通知したい方は受け取ったDelegateのセレクタをコールする。
- (void) HogeSend : (NSString*) delegate:(id)del selector:(SEL)sel {
// 処理
[del performSelector:sel];
[0回]