iOS开发:同步方法中混杂异步方法,导致异步方法还没有回调,同步方法就返回了值,因此返回了nil。解决方法

      今天调试一个问题,具体是:类似微信的一个产品,最近联系人页面,收到一个新建的群的第一条消息,最近联系人页面增加了一个新的会话,但是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方法为什么不执行。

    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值