您的位置:首页 > 移动开发 > IOS开发

关于ios使用线程导致程序不规律的闪退问题解决

2013-09-18 11:03 627 查看
之前自己写的一个小项目,使用支线程的目的就是为了一些运算 或者服务器间的交互。

[NSThreaddetachNewThreadSelector:@selector(setLoadData)toTarget:selfwithObject:nil];
开启一个线程,方法是setLoadData,主要是去服务器那边请求数据。获取数据之后通知主线程解析数据,方法是

[selfperformSelectorOnMainThread:@selector(parseTheData:)withObject:sizeData
waitUntilDone:YES];
在parseTheData里面是具体的解析方法。

SVProgressHUD开源类库,大家都称它为小菊花。
为了在请求数据的过程就显示小菊花,就是“正在加载”,我在支线程里面使用了,

[SVProgressHUDshowWithStatus:@"加载中..."maskType:SVProgressHUDMaskTypeClear];

结果程序不一定每次都闪退,但是有时候操作快了,就会出现闪退。
原因我觉得是:只有主线程才能控制view的变化,会导致资源抢夺 死锁的。

解决方法:将[SVProgressHUD showWithStatus:@"加载中..." maskType:SVProgressHUDMaskTypeClear];写在线程发起的前面。

问题二:
关于在主线程里声明的数组空间,我在支线程中
removeAllObjects
起初还是正常的,但是在不管的请求数据的过程就,发现程序会不规律的闪退,这让我蛋疼~
后来我通知主线程去removeAllObjects,问题就解决了。

原因:支线程别去用主线程的数据 最好,使用的话 也传入复制使用为好。这样会导致资源抢夺,死锁,程序闪退。

以上是自己记录,如果有什么错误,请大神们指出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐