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
原创粉丝点击