之前自己写的一个小项目,使用支线程的目的就是为了一些运算 或者服务器间的交互。
[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,问题就解决了。
原因:支线程别去用主线程的数据 最好,使用的话 也传入复制使用为好。这样会导致资源抢夺,死锁,程序闪退。
以上是自己记录,如果有什么错误,请大神们指出。