在 IOS 中可以使用 NSURLSession 进行网络编程。NSURLSession 提供了一套高层的 API 用于 HTTP 请求的发送和响应的处理。
使用 NSURLSession 时,需要注意以下几点:
- 从主线程进行网络请求会阻塞 UI,应使用后台 session 发起请求。
- shouldStartImmediately 设置为 NO,否则会在后台 session 创建时发起请求。
- 为每个 task 设置一个 delegate 以处理响应。
- 为 session 设置一个 delegate 以在后台接收到响应时更新 UI。
- 可以通过Suspended 状态挂起和恢复 session。
- 上传或下载任务需设置 task.taskDescription,否则无法在 debugger 查看进度。
下面是一个使用 NSURLSession 的网络请求示例:
objc
// 1. 创建队列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
// 2. 创建 session
NSURLSessionConfiguration *config = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"mySession"];
NSURLSession *session = [NSURLSession sessionWithConfiguration:config
delegate:self
delegateQueue:queue];
// 3. 创建 task
NSURL *url = [NSURL URLWithString:@"http://example.com/"];
NSURLSessionDataTask *task = [session dataTaskWithURL:url];
// 4. 启动 task
[task resume];
// 5. 实现 delegate 方法
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask
didReceiveData:(NSData *)data
{
// 处理接收到的数据
}
- (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session {
// 更新 UI
}