MacDev 板


LINE

※ 引述《HuangJC (吹笛牧童)》之銘言: : : → mraaa: 何不用OperationQueue的方式把每一小塊的運算放進Queue裡? 11/02 13:36 : : → mraaa: 再配合Thread,每個Operation做完用Delegate回頭去處理顯示 11/02 13:37 : : → mraaa: 基本上CollectionView適合每個小塊會重複的動作.... 11/02 13:38 : : → mraaa: 如果每個小區塊都不同...實在沒有用CollectionView的意義 11/02 13:39 : 剛大略看了 NSOperationQuere : 不知道我這是不是多做了 : 這兩天我寫了個架構,可以重覆使用,解決了運算及 ui 間不流暢的問題: : 1.我設定的任務是 ui 可以有輸入,然後內部要經過運算,再去更新 ui : 2.假設計算很花費時間,比如兩秒,因此我另外用一個專門的 thread 在做 : 3.當運算中如果 ui 又有輸入,則會重新運算,不急著更新 ui : 因此輸出結果的 ui 是會有點慢,但整體就流暢了 (輸入部份不會卡卡) : 這就是我經常被要求的,程式架構如下 : - (void)updateThread : { : [mDirtyEvent lock]; : while ( !mQuitThread ) { : if ( !mDirty ) : [mDirtyEvent wait]; : mDirty = false; : //calc, 假設兩秒, 因為這是專門運算的 thread, 所以不會拖到 ui : if ( mDirty ) : continue; : dispatch_async(dispatch_get_main_queue(), ^{ : //update ui, 因為 ui 必需在 mainthread 中操作,所以必需 : //dispatch 出去 : }); : } : [mDirtyEvent unlock]; : } : - (void)setDirty : { : mDirty = true; : [mDirtyEvent signal]; : } : - (void)init : { : newObj->mDirtyEvent = [NSCondition new]; : dispatch_queue_t queue = : dispatch_queue_create("updateui", NULL); : dispatch_async(queue, ^{ : [newObj updateThread]; //啟動一個專門運算的 thread : }); : } : - (void)dealloc : { : mQuitThread = true; : } : 如上,這架構這兩天用得蠻開心的 : 但還是有些不懂 : mQuitThread 這個變數,似乎不太需要 : 因為 updateThread 好像會自己結束,根本不用我操心 : 這是我難以理解的.. 如果照你說的流程,我會選擇在有新的輸入的時候就把舊的Task給Cancel掉,然後重新起 新的Task! 建議你用Operation Queue是因為它本身應該就已經是Multithread了!我永遠都相信,如 果原生就有提供工具來實作,我就會讓它來處理這種東西!自己寫的不見得比較好!就像 我說的Cancel Operation功能在OperationQueue就已經有提供了! --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 70.192.17.168
※ 文章網址: http://webptt.com/m.aspx?n=bbs/MacDev/M.1415044413.A.1E0.html
1F:推 HuangJC: 主要是視野問題啦,我覺得我在寫系統有提供的東西,但系 11/04 14:29
2F:→ HuangJC: 統的東西我又用得不熟,逼不得已就模仿一個小的 11/04 14:30
3F:→ HuangJC: 像我那個 while loop,我就想到 runloop,但我真的不會寫 11/04 14:30
4F:→ HuangJC: runloop 11/04 14:30
5F:→ HuangJC: 在你的說法,我們假設我有 50 個 cell,你可以切成50個 11/04 14:31
6F:→ HuangJC: 運算,然後各別 update 50個 cell,很完美又不會卡,也不 11/04 14:31
7F:→ HuangJC: 必在乎任何一個 cell 先或後完成;一切聽天由命 11/04 14:32
8F:→ HuangJC: 但我這串文所提出的第一個問題是:我無法把50個update拆 11/04 14:32
9F:→ HuangJC: 開,一但 updateall,就是50個全做;假設全做要一秒,就卡 11/04 14:33
10F:→ HuangJC: 住了。也就是說我要到發現可以各別update single cell 時 11/04 14:33
11F:→ HuangJC: 才想到可以用你的做法.. 11/04 14:33
12F:推 HuangJC: 最新進度是,我似乎還是不能用 operationqueue,細節不同 11/04 17:16
13F:→ HuangJC: 因為它的 cancel 並不能中斷已經開始的 block,而我要求所 11/04 17:16
14F:→ HuangJC: 有 block不要同時執行,要一個一個執行 11/04 17:17
15F:推 HuangJC: 也就是同步非同步的問題;這麼龜毛只好自己打造了 11/04 17:22
16F:→ Blueshiva: 所謂的queue,就是一個個拿出來執行啊...哪來的所有 11/04 20:39
17F:→ Blueshiva: block同時執行... 11/04 20:39
18F:→ Blueshiva: 另外只要原po找一下HuangJC的文章,就會知道自幹輪子是 11/04 20:39
19F:→ Blueshiva: 他的人生信仰(其實這也沒啥不好...) 11/04 20:40
20F:→ HuangJC: 找一下我文章還可以發現其他事咧 11/04 20:59
21F:→ HuangJC: 哪來所有 block 同時執行這事,我已經寫程式驗過了 11/04 20:59
22F:推 HuangJC: 公司交代的任務有時間限制,不管是否自己打造但我完成了 11/04 21:02
23F:→ HuangJC: 而且來這板問之前我有先問過同事,沒別人會,他們還等我 11/04 21:02
24F:推 Blueshiva: 啊,抱歉,因為我記得opqueue是可以設定一個個執行的 11/04 21:03
25F:→ HuangJC: 帶答案回去分享.. 11/04 21:03
26F:→ HuangJC: 設定?那就是要設了,我找找 11/04 21:03
27F:→ Blueshiva: 你可能開到的是只要系統ok就儘量多跑幾個的那種 11/04 21:03
28F:→ Blueshiva: key: operationqueue setmaxconcurrentoperationcount 11/04 21:05
29F:→ Blueshiva: @HuangJC:看看這是不是你要的 11/04 21:05
30F:推 HuangJC: 謝謝,應該是;有空我再把自己寫的程式改掉,謝謝 11/04 21:15
31F:→ HuangJC: (不過這東西和 Android 不知有沒有對稱,我們總是要一樣 11/04 21:16
32F:→ HuangJC: 的產品寫一式兩套,android & ios 都要寫) 11/04 21:16







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燈, 水草

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

TOP