动态识别NSoperation

时间:2014-07-14 06:33:27

标签: ios multithreading nsoperation

如何动态识别Nsoperation。

我正在创建一个NSoperation子类

- (id)initWithConnectDevice:(ConnectDevice *)cDevice toPeripheral:(CBPeripheral*)peripheral oPerationIndex:(int) index{

if (self = [super init]) {

    operationIndex = index;
    executing = NO;
    finished = NO;
    self.connectDevice = cDevice;
    [self.connectDevice setDelegate:self];
    self.connectedPeripheral = peripheral;
}
return self;

}

-(BOOL)isConcurrent{
return YES;
}
- (BOOL)isExecuting {
return executing;
}

- (BOOL)isFinished {
return finished;
}

-(void) terminateOperation {
[self willChangeValueForKey:@"isFinished"];
[self willChangeValueForKey:@"isExecuting"];
finished = YES;
executing = NO;
[self didChangeValueForKey:@"isExecuting"];
[self didChangeValueForKey:@"isFinished"];
}

- (void)start {

@autoreleasepool {

    if (self.isCancelled){

        [timer invalidate];
        [self willChangeValueForKey:@"isFinished"];
        finished = YES;
        [self didChangeValueForKey:@"isFinished"];
        return;
    }

      timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self   selector:@selector(timerFired:) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] run];

}
}

 -(void)timerFired:(id)sender{

NSLog(@"timerFired");

}

我正在扫描BLE设备。例如,我将找到3个设备,将创建3个按钮。

每次点击该按钮时,我都会打电话给这个班级。这意味着,当我点击按钮时,我正在连接到蓝牙设备并从该设备获取数据,这就是为什么我在使用计时器开始方法。

就像我有多个蓝牙设备一样,每当我点击按钮时,我想创建操作队列类的多个实例。

现在,我想确定哪个数据来自哪个线程。 你能帮帮我吗......

这就是我从viewcontroller

调用类的方法
 OperationQueue *queue = [[OperationQueue alloc] initWithConnectDevice:connectDevices      toPeripheral:peripheral oPerationIndex:operationIndex];
queue.delegate = self;

[[[AppDelegate app] mainQueue] addOperation:queue];
operationIndex = operationIndex+1;

1 个答案:

答案 0 :(得分:1)

您的每个操作都有两个标识属性 - 连接的设备和索引。当计时器触发时,根据您要对数据执行的操作,您可以使用这些属性来指示数据的来源。

你可以在操作上有一个委托属性,当定时器触发时接受设备和接收的数据作为参数时调用委托方法,或者你的操作可以有一个块属性,这需要一个块来每当接收到数据时执行 - 该块将设备和接收的数据作为参数。

假设您想在接收数据时更新UI,请务必调用委托方法或在主线程上执行块。