MacDev 板


LINE

結果發生了神奇的事 原本我說即使把 cell 內容填值這部份運算加快 即 cell.text = @"tt"; // 填固定值,所以運算極快了 也還是有嚴重的 lag 在我把程式分離出來後,竟然解決了 然後回頭再去調整原程式,本來無法加快的也加快了 Orz 我實在不知道當初怎麼調整的,會無論如何都調不出來 當初沒保留版本,現在死無對證 所以現在問題就變成要把運算及顯示拆開 在這邊還是想請問大家一個架構,在微軟的 Visual C++/MFC 下我寫得出來 但在 Object C 我寫不出來 --------- 假設我的運算時間長達兩秒,無法忍受 我可以用另一個 thread 來做,等做出來後再請 UI thread 顯示 而為了使 UI 的操作流暢,架構大概會是這樣 - (void)UIClick { PostToThread(^{ //在另一個 thread 中運算,並儲存結果,時間長達兩秒 PostToUI(^{ //要求 UI 顯示,時間也要半秒 }); }); } 如上,UI 若顯示快就沒問題了,但偏偏 UI 也還是要花上半秒 上面的架構執行結果大概會是 UI 接受動作後,畫面在兩秒後更新 每一次 click 都會更新一次 UI 而我想要更流暢的,就是如果在兩秒運算中又有 UI Click 進來 那麼運算完(也可以中斷;這先不列入目標)後又會馬上重啟運算 直到 user 完全沒再有 UI 輸入,才真的去更新 UI 這有點像多次 SetNeedsDisplay 後,被合併起來只執行一次更新的感覺 因此我想要的是 user click -> calc value user click -> calc value user click -> calc value //太久沒 click update UI 但我實作的結果是 user click -> calc value -> update UI user click -> calc value user click -> calc value -> update UI 有加快,不流暢 我 click 的速度大約 0.3秒一次,而 update ui 一但開始就佔用 0.5秒 這使得整個動作忽快忽慢,完全稱不上流暢 若 calc 佔用兩秒,照理每 0.3 秒一次的 click 是夠早告知系統應該連續運算 不要進入 update UI 才對 用另一個 calc thread 不就是為了流暢嘛 我的問題在,我捨不得開一個 thread 一直檢查 status 假設我自己做 dirty 管理 (就像 setNeedsDisplay) - (void)UIClick { mDirty = true; } 另一個 thread 只要監視 dirty 變數,一但 dirty 發生就去運算 - (void)calcThread { while(!QuitThread) { while ( mDirty == false ) //P1 ; mDirty = false; //calc 兩秒 if ( mDirty = false ) { //updateUI } } } 如上,這個 thread 一直在 while loop 中等待 一但 mDirty 變成 true,就會計算,在計算的一開始我就先 reset dirty 所以如果計算過程中又發生 UI click, 那麼就又會被 set dirty 於是 update ui 就不會被執行 總之一定要整個運算都完成並且沒有新的 ui click, 才會去更新 ui 這邏輯可用,但問題是另一個 thread 在 P1 這點 實在不該用 while loop 一直檢查 mDirty 這個變數 這代表這個 thread 一直瓜分 cpu 時間 在微軟的 Visual C, 我會用 event, 配合同步指令 但在 Object C 中,我想用 @syncronize 卻寫不出來... -- 活動/美食計劃 蘭嶼 魚白 勝興車站 星月天空 武陵 草嶺古道 嘉義阿里山小火車 保齡球  司馬庫斯 手包水餃 日月潭纜車 合歡攻頂 馬祖 鹽山 南庄 澎湖 溪頭/松林町 南投天梯 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.180.127.76
※ 文章網址: http://webptt.com/m.aspx?n=bbs/MacDev/M.1414819471.A.44D.html http://stackoverflow.com/questions/6080406/setting-events-in-objective-c 好像有解了... ※ 編輯: HuangJC (175.180.127.76), 11/01/2014 13:29:37
1F:→ HuangJC: 其實這應該像 runLoop, 但我上次學 runLoop 撞牆了.. 11/01 16:35
2F:→ HuangJC: 另外這篇的架構問題,算是解決了;整體已達流暢.. 11/01 16:36
3F:→ mraaa: 何不用OperationQueue的方式把每一小塊的運算放進Queue裡? 11/02 13:36
4F:→ mraaa: 再配合Thread,每個Operation做完用Delegate回頭去處理顯示 11/02 13:37
5F:→ mraaa: 基本上CollectionView適合每個小塊會重複的動作.... 11/02 13:38
6F:→ mraaa: 如果每個小區塊都不同...實在沒有用CollectionView的意義 11/02 13:39
7F:→ HuangJC: 你是說,如果小區塊都不同,就乾脆全用 uiview 去組合? 11/02 20:57
8F:→ HuangJC: 我的確是有用錯元件的感覺 11/02 20:58
9F:→ HuangJC: 就原題來說,我另外找到一個解決方法了 11/03 21:11
10F:→ HuangJC: 用 reloadItemsAtIndexPaths,這樣可以一個一個 cell 做 11/03 21:12
11F:→ HuangJC: 因為我原本的抱怨是'一次全部都做,無法打斷' 11/03 21:12
12F:→ HuangJC: 這逼使我把計算和顯示的 code 分離,以加快顯示 11/03 21:13
13F:→ HuangJC: 但假設要先計算兩秒,看似沒動作,也是略有困擾.. 11/03 21:14







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP