@interface testOperation : NSOperation {
BOOL isExecuting, isFinished;
}
@end
testOperation.m
#import "testOperation.h"
@implementation testOperation
-(void) dealloc {
[super dealloc];
}
- (BOOL)isExecuting {
return isExecuting;
}
- (BOOL)isFinished {
return isFinished;
}
/**
* 処理メイン
*/
-(void) main {
LOG_METHOD;
for (;;) {
// 〜適当なループ処理など
if ([self isCancelled])
break; // キャンセルの場合にループを抜けるなりreturnするなり
}
}
@end
呼び出し元
- (void) hogehoge {
NSOperationQueue * _queue;
_queue = [[NSOperationQueue alloc] init];
// 1つ目のリクエスト
testOperation *ope1 = [[[testOperation alloc] init]retain];;
[ope1 autorelease];
// 終了監視
[ope1 addObserver:self forKeyPath:@"isFinished"
options:NSKeyValueObservingOptionNew context:nil];
// キュー実行
[_queue addOperation:ope1];
}
- (void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object
change:(NSDictionary*)change context:(void*)context
{
LOG_METHOD;
// タスク終了時の処理
// 〜〜〜〜
// キー値監視を解除する
[object removeObserver:self forKeyPath:keyPath];
}
0 件のコメント:
コメントを投稿