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/cn.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灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP