以下问题为朋友们问我的问题,笔者在这里统一根据个人理解和所学提供参考,如有任何疑问或出错之处,请在评论处评论或者直接联系笔者。谢谢!
由一个app1跳转到app2之后,app2完成某项任务之后,怎么把app2的完成信息传到app1(自己的程序是app1),传的是什么类型的数据,怎么进行解析?
笔者针对这个问题,写了一篇文章并提供demo下载:iOS App之间如何通信
笔者学习相关socket知识,写了这几篇文章,可以参考:
iOS Socket理论知识
iOS Socket UDP编程-C语言版
iOS Socket TCP编程-C语言版
iOS Socket编程-Objective-C原生API版
iOS Socket编程-Objective-C基于CocoaAsyncSocket版
iOS Socket编程-Swift原生API版
iOS Socket编程-Swift基于AsyncSocket版
关于图片的压缩处理,在ios中常用的方法是先处理像素再处理尺寸。大家可以参考笔者所写的这篇处理压缩处理文章:
iOS 图片压缩处理
最直接的办法就是使用UIImageView的contentMode,让其自动适应,但是这样会消耗一定的性能。
如果要优化,可以通过手动将原图处理成UIImageView大小的图,再给它呈现。
iOS 高效添加圆角效果实战讲解
通常耗时的操作都会放在子线程里处理,然后再回到主线程来显示。下面举几个例子:
就想到这些了,大家再补充吧~
版本迭代一定要注意兼容老版本,比如新增了字段或者去掉了某些不再使用的字段,不能引起应用闪退。我们这里只谈程序代码兼容新老版本问题,不考虑业务。因为业务是要求后台来兼容的,通常接口会有版本号控制,用于兼容不同版本的客户端。
对于任何一个App,当可以升级的时候,不会是所有用户就立刻去升级,通常会有很大一部分的用户是不愿意立刻升级的。原因会有很多种,比如我这种的就不会频繁升级,因为对于我来说,这个App并不是天天用,没有必要升级。
那么,我们在iOS开发时,如何去兼容老版本的,保证新版本的增加或者删减不会影响到老版本呢?其实这个问题似乎并不是说有没有新、老版本问题,更重要的是程序的健壮性问题。
对于我们做前端的,永远不要相信后台一定会按照原先约定返回我们想要的数据结构以及所有字段。
假设接口返回来的数据是这样的,我们需要通过类型判断,确保不会因为接口变化返回无效数据而引起闪退。当然,当接口返回的数据结构与我们原先约定的不一样时,通常是因为后台出错了,因此为了程序更健壮,我们应该要容得下后台的错误:
AFHTTPRequestOperation *op = [selfPostRequestWithUrl:urlparams:paramscompletion:^(id responseObject) { BOOL isSuccess = NO; if ([responseObjectisKindOfClass:[NSDictionary class]]) { NSDictionary *response = responseObject[@"response"]; if ([responseisKindOfClass:[NSDictionary class]]) { NSArray *resultList = response[@"resultList"]; if ([resultListisKindOfClass:[NSArray class]]) { NSArray *listModels = [HYBCosmesisModelobjectArrayWithKeyValuesArray:resultList]; isSuccess = YES; completion(listModels); } } } if (!isSuccess) { // 表示出错 completion(nil); } }errorBlock:^(NSError *error) { errorBlock(error); }];
而我们在使用的时候,对于字符串、数组、字典都应该要做一下类型判断和空处理。比如:
if ([responseisKindOfClass:[NSDictionary class]]) { NSString *value = response[@"blogName"]; if (!kIsEmptyString(value)) { // Do my job } NSArray *array = response[@"array"]; if ([arrayisKindOfClass:[NSArray class]]) { // Do my job } }
对于业务方面的话,由后台来做版本控制,通过在接口做添加公共参数,[email protected]
�要调用的是哪个版本的接口。
这个问题非常简单,但是对于新手就不太清楚了。在很多小公司里,前端好像什么都不需要管,只等后台给你一个接口及参数说明就可以了,根本不清楚后端为什么要这么设计这个接口。
那笔者也来聊聊如何与后端服务器交互:
好了,就扯谈这些吧~
使用Dispatch Group追加block到Global Group Queue,这些block如果全部执行完毕,就会执行Main Dispatch Queue中的结束处理的block。
当放到group中的所有请求都完成时,才会回调dispatch group notify的block:
dispatch_queue_tqueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_group_tgroup = dispatch_group_create(); dispatch_group_async(group, queue, ^{ /*加载图片1 */ }); dispatch_group_async(group, queue, ^{ /*加载图片2 */ }); dispatch_group_async(group, queue, ^{ /*加载图片3 */ }); dispatch_group_notify(group, dispatch_get_main_queue(), ^{ // 合并图片 });
这个不太清楚想问什么,笔者翻看了看GCD中dispatch group t里,也没有什么可以设置同一个组内的任务依赖关系的,就看到dispatch group wait这个API:
long dispatch_group_wait(dispatch_group_tgroup, dispatch_time_ttimeout);
这个API是等待group中的所有任务都执行完毕才能继续往下执行其它任务。它是同步地等待任务执行完毕。比如,A、B、C、D四个任务,要求A、B执行完毕后,C、D才能开始执行,那么可以通过这样做:
dispatch_queue_tqueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_group_tgroup = dispatch_group_create(); dispatch_group_async(group, queue, ^{ /* 任务A */ }); dispatch_group_async(group, queue, ^{ /* 任务B */ }); dispatch_group_notify(group, dispatch_get_main_queue(), ^{ dispatch_group_async(group, queue, ^{ /* 任务C */ }); dispatch_group_async(group, queue, ^{ /* 任务D */ }); });
或者可以这样:
dispatch_queue_tqueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_group_tgroup = dispatch_group_create(); dispatch_group_async(group, queue, ^{ /* 任务A */ }); dispatch_group_async(group, queue, ^{ /* 任务B */ }); // 同步等待A、B执行 dispatch_group_wait(group, DISPATCH_TIME_FOREVER); dispatch_release(group); // 重新创建组 group = dispatch_group_create(); dispatch_group_async(group, queue, ^{ /* 任务C */ }); dispatch_group_async(group, queue, ^{ /* 任务D */ }); dispatch_group_notify(group, dispatch_get_main_queue(), ^{ // C、D执行完毕后,想干嘛就干嘛去吧 });
不知道笔者对题目的理解是否到位,上面的代码是随手写的,可能单词会写错~~~
这个问题,笔者在另外一篇文章中写到,然后也在微博上收集了很多朋友们的想法。请大家稳步去阅读吧!
iOS如何在用户修改头像后正常显示
关注 | 账号 | 备注 |
---|---|---|
标哥博客iOS交流群一 | 324400294(满) | 群一若已满,请申请群二 |
标哥博客iOS交流群二 | 494669518(满) | 群二若已满,请申请群三 |
标哥博客iOS交流群三 | 461252383(满) | 群三若已满,请申请群四 |
标哥博客iOS交流群四 | 250351140 | 群四若已满,会有提示信息 |
关注微信公众号 | iOSDevShares | 关注微信公众号,会定期地推送好文章 |
关注新浪微博账号 | 标哥的技术博客 | 关注微博,每次发布文章都会分享到新浪微博 |
关注标哥的GitHub | CoderJackyHuang | 这里有很多的Demo和开源组件 |
关于我 | 进一步了解标哥 | 如果觉得文章对您很有帮助,可捐助我! |