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:

2013年11月3日 星期日

JavaScript: Falsy Values

2013年4月14日 星期日

Android 用 adb shell啟動 Activity

在app中intent 可以透過Action或是Activity Name來啟動新的Activity
用adb shell 也同樣可以做到

1. 用Action啟動 activity

adb shell am start -a android.intent.action.MAIN

可以再加上category


adb shell am start -a android.intent.action.MAIN -c android.intent.category.HOME



2. 用activity name 啟動 activity
注意前面要加上package name
格式:am start -n package name / activity name  )

am start -n com.demo.browser/com.demo.browser.BrowserActivity