1: 使用代理
//1.delegate //创建url NSURL *url = [[NSURL alloc] initWithString:@"http:"];// 创建request NSURLRequest *urlRequesr = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30];// 发送异步请求// 异步请求不知道什么时候获取到数据,用delegate这种模式来创建,当获取到数据后,会自动调转到代理方法中 [NSURLConnection connectionWithRequest:urlRequesr delegate:self];
#pragma mark - NSURLConnectionDataDelegate //请求出现错误- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ NSLog(@"%@", error);}//- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response//{ // //} //请求收到回应(可以认为请求开始)- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ NSLog(@"%@", response); self.mData = [NSMutableData data]; } //请求获取到数据- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ NSLog(@"%@", data); //网络上的数据以包得形式,一个包一个包得传递过来,需要把收到包数据整合到一起 [_mData appendData:data];} //请求完成- (void)connectionDidFinishLoading:(NSURLConnection *)connection{ UIImage *image = [UIImage imageWithData:_mData];
self.view.backgroundColor = [UIColor colorWithPatternImage:image]; }
2: 使用Block
NSURL *url = [NSURL URLWithString:@""]; NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url]; [NSURLConnection sendAsynchronousRequest:urlRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { NSLog(@"%@", data); self.myData = data; [self readData]; }];- (void)readData { UIImage *image = [[UIImage alloc] initWithData:_myData]; self.view.backgroundColor = [UIColor colorWithPatternImage:image];}