使用NSOperationQueue和块

时间:2012-02-24 22:49:47

标签: cocoa nsoperationqueue

我在Cocoa中使用addoperationwithblock时遇到了一些麻烦。假设我有一个主函数

-(IBAction) callthisone {

  // Call another function "slave" here and store returned value in result

    result = return value from slave
    NSLog(@" result is %@",result);
 }];

}

-(NSArray *) slave {

 [operationQueue addOperationWithBlock: ^{   

  NSString * result = @"5" ;
  }];

 return result;
}

我永远无法获得master中返回的结果值。我该怎么做呢 ?我的方法是否正确?感谢

2 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

-(IBAction) callthisone {
    [self slave: ^(NSString* result) {
            NSLog(@" result is %@",result);
        }
    ];
}


-(void)slave: (void(^)(NSString*)) callback {
    [operationQueue addOperationWithBlock: ^{
            NSString* str = [NSString stringWithFormat: @"5]";
            callback(str);
        }
    ];
}

答案 1 :(得分:0)

Apple's documentation for addOperationWithBlock说:

  

参数

     

要从操作对象执行的块。块应该采取   没有参数,也没有返回值。

这些用于自包含块操作。

你可以尝试一些不同的东西,在进出队列/线程方面有更大的灵活性吗?也许Grand Central Dispatch(我只是looking at this thread)。