2014年11月19日 星期三

Objective-C 多線程: Grand Central Dispatch(GCD)

Serial sync嵌套會死鎖, 外部的sync block會等待內部的sync block完成才結束, 但內部的永遠執行不到
GCD_TEST[45149:303] HELLO
GCD_TEST[45149:1a03] async:{name = (null), num = 2}
-
Concurrent 怎麼嵌套都不會死鎖, 因為block沒有順序依賴關係
GCD_TEST[45167:303] HELLO
GCD_TEST[45167:303] sync:{name = (null), num = 1}
GCD_TEST[45167:1503] async:{name = (null), num = 2}
GCD_TEST[45167:1503] sync-async:{name = (null), num = 2}
GCD_TEST[45167:1a03] async-async:{name = (null), num = 3}
GCD_TEST[45167:303] sync-sync:{name = (null), num = 1}
GCD_TEST[45167:1503] sync-async:{name = (null), num = 2}
-
Main async 和 sync 相同, 都在主線程, 怎麼嵌套都會死鎖, 只用sync也無法執行, 因為main queue一直有任務在執行
GCD_TEST[45083:303] HELLO
-
Global 系統共用的queue, 效果同Concurrent
GCD_TEST[45187:303] HELLO
GCD_TEST[45187:303] sync:{name = (null), num = 1}
GCD_TEST[45187:1a03] async:{name = (null), num = 2}
GCD_TEST[45187:1a03] sync-async:{name = (null), num = 2}
GCD_TEST[45187:1f03] async-async:{name = (null), num = 3}
GCD_TEST[45187:303] sync-sync:{name = (null), num = 1}
GCD_TEST[45187:1a03] sync-async:{name = (null), num = 2}


2014年8月19日 星期二

javascript function.call()


var a = function(a,b,c){
  console.log(this.a);
  console.log(this.b);
  console.log(this.c);
  console.log(a);
  console.log(b);
  console.log(c);
}
 
var b = {
  a:123,
  b:456,
  c:789
}
 
a.call(b,1,2,3)
//  output:
//  123
//  456 
//  789 
//  1
//  2
//  3
 
a.apply(b,[1,2,3])
//  output:
//  123
//  456 
//  789 
//  1
//  2
//  3

2014年5月3日 星期六

HTML5的觸控事件

螢幕被點擊後依序會觸發三個事件:
touchStart 開始
touchMove 移動
touchEnd 結束

觸控點列表:
touches screen上所有的觸控點
targetTouches 元素上所有觸控點
changedTouches 該次事件相關的觸控點

Touch的屬性:
identifier 第n個觸控點(從0開始)
target 元素
pageX/Y 該頁面的x/y距離
clientX/Y 該頁面的x/y距離(不包含滾動距離)
screenX/Y 螢幕的x/y距離

效果:

Demo:

Source Code: