使stringWithContentsOfURLasynchronous – 是否安全?

我试图通过同步地从后台线程运行它 – [NSString stringWithContentsOfURL:encoding:error:]asynchronous。

__block NSString *result; dispatch_queue_t currentQueue = dispatch_get_current_queue(); void (^doneBlock)(void) = ^{ printf("done! %s",[result UTF8String]); }; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, (unsigned long)NULL), ^(void) { result = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com/"] encoding:NSUTF8StringEncoding error:nil]; dispatch_sync(currentQueue, ^{ doneBlock(); }); }); 

它的工作正常,最重要的是,它的asynchronous。

我的问题是,如果这样做是安全的,还是可以有任何线程问题等?

提前致谢 :)

这应该是安全的,但为什么重新发明轮子?

 NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]; [NSURLConnection sendAsynchronousRequest:req queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; // etc }]; 

你也可以使用:

 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ NSError *error = nil; NSString *searchResultString = [NSString stringWithContentsOfURL:[NSURL URLWithString:searchURL] encoding:NSUTF8StringEncoding error:&error]; if (error != nil) { completionBlock(term,nil,error); } else { // Parse the JSON Response NSData *jsonData = [searchResultString dataUsingEncoding:NSUTF8StringEncoding]; NSDictionary *searchResultsDict = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&error]; if(error != nil) { completionBlock(term,nil,error); } else { //Other Work here } } }); 

但是,是的,它应该是安全的。 我被告知,虽然使用NSURLConnection,而不是由于错误调用等通过互联网通信。 我仍然在研究这个。

 -(void)loadappdetails:(NSString*)appid { NSString* searchurl = [@"https://itunes.apple.com/lookup?id=" stringByAppendingString:appid]; [self performSelectorInBackground:@selector(asyncload:) withObject:searchurl]; } -(void)asyncload:(NSString*)searchurl { NSURL* url = [NSURL URLWithString:searchurl]; NSError* error = nil; NSString* str = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error]; if (error != nil) { NSLog(@"Error: %@", error); } NSLog(@"str: %@", str); }