本文以UIActivityIndicatorView为例,有没有同学试过调接口,调接口的时候会不会想要有个UIActivityIndicatorView去转圈圈来表示正在等待呢?但是你如果直接调接口的话,即使你用UIActivityIndicatorView ,会不会怎么也无法显示呢? 如果遇到这种情况,用GCD就可以,不过好麻烦就是了……
- (IBAction)queryUser:(id)sender { [telephoneTextField resignFirstResponder]; //开始转圈圈 [indicator setHidden:NO]; [indicator setHidesWhenStopped:YES]; [indicator startAnimating];//转圈圈 //采用GCD,如果调接口成功或者失败,圈圈停止 dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSString *telephone = telephoneTextField.text; if ([telephone length] == 0) { //执行主线程 dispatch_async(dispatch_get_main_queue(), ^{ UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"业务号码不能为空" message:@"请重新输入条件查询!" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil]; [alertView show]; [alertView release]; [indicator stopAnimating];//停止圈圈 }); return; } //调用接口 UserQueryBO *userQueryBO = [[UserQueryBO alloc] init]; NSDictionary *resultList = [userQueryBO queryUser:telephone forUser:nil]; //接口返回值 NSString *returnCode = [NSString stringWithFormat:@""]; NSString *message= [NSString stringWithFormat:@""]; NSString *resultInfo= [NSString stringWithFormat:@""]; if (resultList != nil) { returnCode = [resultList objectForKey:@"ReturnCode"]; message = [resultList objectForKey:@"Message"]; resultInfo = [resultList objectForKey:@"ResultInfo"]; //NSLog(@"%@", resultInfo); } if ([returnCode isEqualToString:@"0"]) { if ([resultInfo length] > 0) { //成功调用主线程,利用主线程里navigationController去打开新页面 dispatch_async(dispatch_get_main_queue(), ^{ UserQueryShowVC *userQueryShowVC = [[UserQueryShowVC alloc] init]; userQueryShowVC.userInfo = resultInfo; [self.navigationController pushViewController:userQueryShowVC animated:YES]; self.navigationController.title = @"用户查询详情"; [userQueryShowVC release]; }); } else { //接口调用失败,利用主线程打开输入框 dispatch_async(dispatch_get_main_queue(), ^{ UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"没查询到相关用户信息" message:@"请重新输入条件查询!" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil]; [alertView show]; [alertView release]; [indicator stopAnimating];//停止圈圈 }); } } else { //接口调用失败,利用主线程打开输入框 dispatch_async(dispatch_get_main_queue(), ^{ UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"查询失败" message:[@"请重新输入条件查询!失败信息:" stringByAppendingString:message] delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil]; [alertView show]; [alertView release]; [indicator stopAnimating];//停止圈圈 }); } //[resultInfo release]; //[message release]; //[returnCode release]; [userQueryBO release]; //这里,保险起见,再停止圈圈…… dispatch_async(dispatch_get_main_queue(), ^{ [indicator stopAnimating]; }); }); }
代码如上,用//采用GCD
dispatch_async(dispatch_get_global_queue(0, 0), ^{});将接口逻辑放在这里,如果需要停止圈圈或者弹出对话框,则用
dispatch_async(dispatch_get_main_queue(), ^{
[indicator stopAnimating];
});
去会写数据到主线程。
记得,不这样的话会报错的说
相关推荐
总的来说,libcurl库为iOS开发者提供了强大且灵活的网络请求解决方案,尽管其C语言的接口可能对一些开发者来说不太友好,但通过适当的封装,我们可以轻松地在Objective-C或Swift项目中集成和使用libcurl。
3. **线程安全措施**: 异步状态机可能涉及到多线程操作,因此需要确保状态转换和回调函数的执行是线程安全的,可能使用GCD(Grand Central Dispatch)或其他并发机制。 4. **错误处理和调试辅助**: 可能会有日志...
这涉及到SDK的引入,调用支付接口,处理支付结果回调等。 八、权限管理 考虑到用户隐私,点餐系统可能需要获取用户的位置信息,这时需要处理Location Services的权限请求。同时,如果涉及到相机或相册,也需要处理...
1. 回调处理:在网络请求中,常常用Block来处理成功或失败的回调。 ```objc [NSURLSession.sharedSession dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response,...
2. **异步编程**:FTP操作通常涉及网络通信,因此需要处理异步任务,了解GCD(Grand Central Dispatch)、NSOperationQueue或Block回调的使用。 3. **错误处理**:学习如何捕获和处理FTP操作可能出现的错误,提供...
然而,由于在iOS 9之后被弃用,所以在现代iOS开发中不应再使用。 3. **PHPhotoLibrary**:取代ALAssetsLibrary的新版照片库框架,提供访问用户照片和视频的API。使用此框架,开发者可以请求访问权限并执行图片选择...
AsyncSocket是由GCD(Grand Central Dispatch)构建的Objective-C库,它为iOS和macOS应用程序提供了一种简单的方法来处理TCP套接字。这个库使得开发者可以轻松地实现双向数据传输,同时处理多个连接,并且具有异步回...
这个“ios-简易定位器.zip”压缩包可能包含了一个简单的iOS应用示例,用于演示如何使用Core Location来获取用户的实时位置。下面我们将详细探讨相关知识点。 1. **Core Location框架**: Core Location是iOS SDK中...
对于异步操作,通常使用Grand Central Dispatch(GCD)的队列来处理接收的数据。 5. **错误处理**:由于UDP是不可靠的,因此需要处理可能的丢包和乱序问题。同时,需要捕获并处理可能出现的网络错误。 6. **网络...
配合GCD或NSOperationQueue,可以确保网络请求在后台线程中执行,下载完成后,通过回调方法更新主线程的UI。 例如,使用GCD来异步下载数据: ```swift let url = URL(string: "http://example.com/data.json")! ...
- iOS中的网络请求通常基于URLSession,它是苹果推荐的网络编程接口,替代了旧的NSURLConnection。 - URLSession提供了异步操作的能力,可以在后台线程处理网络任务,避免阻塞主线程,提升用户体验。 2. **...
9. **异步回调与GCD**: 为了保证UI线程不被阻塞,通常在后台线程处理网络请求,然后使用Grand Central Dispatch (GCD)回到主线程更新UI。 10. **Moya和Alamofire**: 在实际项目中,为了简化网络请求,开发者通常会...
在iOS应用开发中,Block的使用非常常见,特别是在处理异步操作、事件回调或者复杂逻辑控制时。 Block的基本语法结构如下: ```swift ^(参数列表) -> 返回类型 { // Block体,包含执行的代码 } ``` 例如,一个...
这种方式简化了接口,但可能失去了一些传统代理的灵活性。 在“MessageTransitionExample”这个Demo中,每个通信方式都会有一个具体的示例,开发者可以通过运行和分析代码来深入理解这些机制。同时,配合博主的博客...
"ios-Socket通信.zip"这个压缩包可能包含了关于如何在iOS平台上使用AsyncSocket库进行Socket通信的示例代码和教程。AsyncSocket是由GCD(Grand Central Dispatch)实现的一个异步Socket库,它简化了Socket编程的复杂...
- 异步处理:AFNetworking使用了GCD(Grand Central Dispatch),能够自动管理网络请求的异步执行,避免阻塞主线程。 - 自动处理JSON和XML:AFNetworking内置了解析JSON和XML的能力,简化了数据解析步骤。 - 缓存...
这可以通过监听`URLSession`的回调或使用自定义数据结构来实现。 6. **队列管理**: - 使用`DispatchQueue`可以控制并发下载的数量,避免过多的网络请求导致性能问题或超出服务器限制。 7. **错误处理**: - ...
`dispatch_source`是GCD提供的一种高级接口,用于监听特定的系统资源变化,如文件描述符、 mach端口、内存映射、信号量等。创建`dispatch_source`时,需要指定源类型、事件和处理函数。当触发指定事件时,GCD会自动...
- 协议:Objective-C的协议类似于Java和C++的接口,可以定义一组方法签名,类可以遵循多个协议。如`ClassA<Protocol>`。 7. **类别(Category)**: Objective-C允许通过类别扩展已有的类,添加方法而无需子类化...
避免在主线程上进行耗时的操作,使用GCD或`NSOperationQueue`进行异步加载。同时,合理使用缓存和分页加载策略,减少网络请求和内存消耗。 6. **设计原则**: 设计下拉和右拉更新时,应遵循Apple的人机交互指南,...