1.socket快速发送消息会出现接受消息阻塞
场景:快速点击某个按钮,发送消息时,会出现socket响应消息丢失。
最后分析出现是-[NSInputStream read:maxLength:]卡主了。
下面是出现的解释:TCP Socket的一些行为、
Does -[NSInputStream read:maxLength:] block?
read:maxLength:会阻塞,直到至少有一个字节可用之后,或者发生错误或者流到达EOS。它也将阻塞,直到打开流为止。
我的解决方案:
通过心跳来打破这种等待行为
定义一个计时器,每秒触发一次,当read:maxLength阻塞时发送心跳。
2.数据库卡顿解决
场景:使用时间字段对数据进行升序排序,部分机型出现卡顿
测试时数据量也不是很大,而sql查询的语句大约是8s左右。当时以为是数据库在主线程操作导致的卡顿。
解决方案:
- 最后为时间字段加了索引解决了卡顿问题. 最后的结论是iOS某些系统兼容的问题,按道理几百条数据不可能会这么慢。
- 数据库操作移至子线程
3.id<delegate>使用assgin造成偶现崩溃
这种崩溃日志没有捕捉到,但出现闪退,建议全局搜索,替换成weak修饰。
4.Can't add self as subview
场景:没有复现
解决方案:根据网上的解决方案做容错处理,防止快速push。
网友评论