iOS开发:同步方法中混杂异步方法,导致异步方法还没有回调,同步方法就返回了值,因此返回了nil。解决方法
来源:互联网 发布:数据统计量 编辑:程序博客网 时间:2024/06/14 02:39
今天调试一个问题,具体是:类似微信的一个产品,最近联系人页面,收到一个新建的群的第一条消息,最近联系人页面增加了一个新的会话,但是session的name值为空。
经过调试代码,发现问题所在:session的name属性的get方法。name属性的get方法是一个同步方法,而中间有代码是异步执行的(异步网络请求新的群的群名),请求成功后将群名赋值给session的name属性。问题就是:异步网络请求还没有返回的时候,就已经返回name值了,所以为nil。
遇到这样的问题,解决方法2个:将异步网络请求方法改为同步的;将get方法改为异步的。总之不能同步方法里面套着异步方法。我试着将get方法改为异步,但是不行,或许是get方法一定要有一个返回值?网络请求的异步方法又太耗时,不能改为同步执行的。思考了许久,不知道该怎么做。
后来让同事帮忙看了一下这个问题,他说用一个代理,当取到name值的时候,通知TableViewCell去执行setName。然后我试着去写,虽然最终使用的方法跟他说的不太一样,但思想是一样的,用了一个代理。当取到name值的时候,通知TableViewCell去执行setName。
通过解决这个bug,思考了一下,觉得有时候不要太常规,常规的方法解决不了的时候,转变思维去思考别的方法,反正问题是肯定可以解决掉的。另外,通过这件事,自己需要学习的一些东西:1.属性的set方法和get方法是怎么赋值的?我重写的异步的get方法为什么不执行。
0 0
- iOS开发:同步方法中混杂异步方法,导致异步方法还没有回调,同步方法就返回了值,因此返回了nil。解决方法
- C# 同步异步方法
- IOS 学习 gei post 同步 异步方法
- Java 异步方法转同步
- C#同步方法转异步
- 白话同步方法和异步方法
- 同步方法和异步方法的区别
- Flex 中WebService的异步返回值处理方法
- IOS开发笔记-NSURLConnection同步请求和异步请求以及get方法,post方法
- 异步调用同步返回
- Swift初始化方法返回NIL
- ACE_Future实现了单写多读模式,可以用来异步方法调用的结果返回
- ACE_Future实现了单写多读模式,可以用来异步方法调用的结果返回
- 异常处理方法,同步VS异步
- AJAX同步提交和异步提交方法
- AJAX同步提交和异步提交方法
- 使用异步方式调用同步方法
- 使用异步方式调用同步方法
- Max_allowed_packet配置
- oracle密码解锁
- STM32F4 开发笔记5: miniUART的使用方法
- Lattice DCS (Dynamic Clock Select)
- C++关于迭代器删除(erase)插入(insert)失效问题http://m.blog.csdn.net/blog/a327369238/26715187
- iOS开发:同步方法中混杂异步方法,导致异步方法还没有回调,同步方法就返回了值,因此返回了nil。解决方法
- SpringMVC 过滤器Filter使用解析
- centos =>centos安装软件的两种命令rpm,yum
- c++实现大数加法(含负数)
- Activity主窗口与软键盘的交互模式
- 网页布局基础
- 笔记-侧边栏效果
- 设计模式的思考
- Spark修炼之道(高级篇)——Spark源码阅读:第十二节 Spark SQL 处理流程分析