我开始使用 iOS 中的 NSOperationQueue 并面临一些我想澄清的基本问题。
这是我正在使用的代码:
-(void) SendRequestWithURL:(NSString*) URL andParam:(id) attributes {
[[AFNetworkActivityIndicatorManager sharedManager] incrementActivityCount];
_m_singleton = [Singleton sharedSingleton];
_parser = [[Syncparser alloc]init];
NSString *strServURL = [NSString stringWithFormat:@"%@%@",_m_singleton.globalstrURLLink,URL];
if (_theService == Item0 || _theService == Item1 || _theService == Item2){
NSLog(@"Entrance _theService %i", _theService);
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:strServURL]];
[client postPath:@"POST" parameters:attributes
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"_theService %i", _theService);
switch (_theService) {
case Item0: {
[_m_singleton.globalQueue addOperationWithBlock:^{
NSLog(@"ParseItem0 %@", [operation responseString]);
[_parser ParseItem0:[operation responseString]];
}];
}
break;
case Item1:{
[_m_singleton.globalQueue addOperationWithBlock:^{
NSLog(@"ParseItem1 %@", [operation responseString]);
[_parser ParseItem1:[operation responseString]];
}];
}
break;
case Item2:{
[_m_singleton.globalQueue addOperationWithBlock:^{
NSLog(@"ParseItem2 %@", [operation responseString]);
[_parser ParseItem2:[operation responseString]];
}];
}
break;
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
}
}
我只调用了 item1 和 item2。这些是我在调试器中得到的值。
Entrance _theService 1
Entrance _theService 2
_theService 2
_theService 1
这显然意味着 item2 首先被添加到队列中,然后是 item1。
但令人惊讶的是,ParseItem1 每次都在 ParseItem2 之前被调用。即使 _theService 1 出现在 _theService 2 之前。不知道为什么。对不起菜鸟问题。
需要一些指导。