作者yoll522 (幽靈)
看板MacDev
標題[問題] 滑動手勢造成程式阻塞
時間Tue Oct 6 15:42:07 2015
各位大大好,小弟在寫一個程式,
當中會創建一個socket去接收server傳來的數據,
並把接收到的封包處理好後,用NSLog的方式列出來
因為server會快速且不間段的傳送封包,所以我的Log幾乎不會停止
且我程式中有使用到UITextView跟UIScrollView這兩個元件
但在測試途中卻發現,
只要用手勢的方式稍微捲動這兩個元件,程式就不會在Log出訊息
本來以為只是剛好LAG一下,但如果我在捲動過程中手指停住不動
這時Log就完全不會在列出訊息,直到我的手放開為止
但是放開後整個封包就爆炸了,變成了一坨爛掉的封包
( 因Server傳來的封包,皆是0xAAAA開頭,
但是爆炸後每封數據接不是0xAAAA作為開頭 )
雖然不曉得為什麼上述情形會造成封包爆炸
但還是想請問各位高手,為何只要在用手勢捲動Scroll時,
NSLog的部分就不會在運作,或者感覺像是程式被被block住了
是我哪部分沒有處理好嗎@@?
這是我程式大概的流程:
http://imgur.com/ISLoPGb
還請各位高手指導,謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 203.64.91.67
※ 文章網址: https://www.ptt.cc/bbs/MacDev/M.1444117331.A.D28.html
※ 編輯: yoll522 (203.64.91.67), 10/06/2015 15:42:32
→ LFimi: 你有在scrollViewDidScroll的delegate做啥事嗎@_@ 10/06 17:08
→ yoll522: 沒有,我在那兩個元件皆沒有用到delegate@@ 10/06 17:18
→ Esvent: 你可能把Stream以Default Mode排在Main thread的RunLoop裡 10/06 19:59
→ Esvent: 所以當有UI Touch Event的時候 就會被main runloop忽略 10/06 20:00
→ Esvent: 你可以試試NSRunLoopCommonModes 10/06 20:02
→ Esvent: 或是乾脆直接把它排去其他thread的runloop 10/06 20:02
→ yoll522: 原來如此,感謝樓上的大大,我的確是用currentRunLoop 10/08 10:46
→ yoll522: 來跑,並沒想到會造成這問題,感謝 10/08 10:46