Shit happens, always.

國外一些網路媒體如 Tech Crunch、還有 John Gruber 的網站等,前兩天報導,Joe Hewitt (Facebook 的 iPhone 應用程式的作者)說,他個人打算中止 Facebook 的 iPhone 應用程式開發,轉往進行其他的 Facebook 的計畫,原因是他對於蘋果的 App Store 上架審核機制非常不滿。

剛看到這則新聞的時候,還搞不清楚是怎麼一回事,第一個想法是-別人對上架審核不滿也就罷了,Facebook 有什麼好不滿的?其他人將軟體送進去之後快則到七天之後才能夠等到審核結果,就 App Store 開張以來,唯一看到能夠一個星期推出兩個新版本的軟體,也就只有一個,而這個軟體還不是別的,就是 Facebook。

昨天上班一打開電腦,才終於搞清楚發生在 Joe Hewitt 身上是什麼狀況。打開收信程式,看到蘋果送來的退件信件,說,我們寫的程式不能夠在 App Store 上架,原因是程式裡頭呼叫了 iPhone 的 private API;而我從來就不記得我什麼時候用到過這些東西,查了一下,呼叫 private API 的,不是自己的程式,而是因為程式用到了一個 external library,這個 library 呼叫了,而這個 library 就是 Joe Hewitt 所撰寫的 Three20Continue reading

ObjC 的記憶體管理之今晚你想吃哪一道

好像很多人在接觸 Objective C 開發的時候,在 alloc、retain、release 花了很多力氣,三不五時就看到有人在問這方面的問題。然後有時候看到網路上面的程式碼教學或分享,稍微一看,裡頭在記憶體管理方面的問題也不少,有的是忘記 release 物件,有時你會看到,[NSWorkspace sharedWorkspace] 都有人 release。

說實在,在不是 Garbage collection 的模式下寫 ObjC,大概就是像開手排車一樣,開始使用一個物件的時候就是推到一檔,每多使用一次、多 retain 一次物件,就像是打到了二檔、三檔,最後不再用到這個物件的時候,就是打回空檔。

所以,要比較正確的管理記憶體使用,也會跟開打檔車一樣,需要的不僅只是了解,而是要養成習慣,成為寫程式的時候身體反應的一部分,既然是要養成習慣,就恐怕不是在網路上或是哪裡抓個人問就可以解決。而這個習慣不外乎幾點-大概只有成員變數需要 retain、成員變數在 dealloc 的時候要記得 release,在寫 setter 的時候把原來的成員變數 release 掉並且 retain 新傳來的變數,一般在 method 之間傳遞的變數加上 autorelease,至於 singleton 的物件,就別 release 了。

個人經驗是,大概寫了幾千行 ObjC 之後,記憶體管理的習慣就會豁然清明開朗,先別苦惱,多寫就對了。而不管怎樣,有時候還是會弄錯,如果你在用 Mac OS X 10.6 上面的 Xcode,Xcode 有一個叫做「Build and Analysis」的選項,會在編譯的時候,幫你把忘記 release 的物件找出來。

如果你花了一定時間,還是對於 ObjC 的記憶體管理苦手的話,呃,那不如這樣-都不要 release 物件。

Continue reading

Use delegate methods, Luke.

有時候看一些討論區裡頭的內容,實在讓人不禁眉頭一皺。比方說,你看到有人問了這樣一個問題-

如果我有一個NSArray存放不固定數量的CGPoin,這些Point在drawRect中都被用來當作是draw的data,但其實這些點也要被某個我的Controller class來增減或改變。

請問這些data object(NSArray contain CGPoint),是放在View的class底下比較好, 還是放Controller的class底下,比較好ㄋ?

然後馬上出現的回應是:

其實你高興就好, MVC 不是強制的, 也有很多灰色地帶
是我的話這類東西通常放在 view, 不過那是我

是啦,雖然不是說不照某種方法設計,程式就會動不了,但是在直接跳到「MVC不是強制的」這種意見之前,是不是忽略了幾個討論-如果是用 MVC 的設計,應該要怎麼做,這種需求難道用 MVC 的方法沒有辦法解決嗎?蘋果自己是怎麼處理這樣的狀況?

另外一個很大的問題是-你是使用者的話,你會敢用抱持著「高興就好」的開發者寫出來的東西嗎?…

Continue reading

捷運逃生體驗營

捷運逃生體驗營

下班的時候在捷運站看到這麼一則燈箱廣告,才知道原來有這麼一個活動。

強化國民防災應變的能力的確是一件好事。不過,打上了「全球鐵道系統首創」這樣的標語,就不禁想要了解,之所以首創捷運逃生體驗教育的創意來源-是不是因為在全球的鐵道系統當中,就屬台北捷運,特別有逃生的必要。

台北 GTA

九月 20 日,男子駕駛價值千萬的黃色法拉利跑車,在東興路上起火爆炸,燒到只剩下骨架;十月 18 日,珠寶小開在安坑交流道附近失控撞上內側車道,原地旋轉了八九圈,把一輛限量藍寶堅尼跑車撞成廢鐵;十月21日,計程車司機與乘客發生口角,在乘客下車之後,在八德路上,司機從後方追撞殺害乘客,被害人整個被撞飛,身體撞碎了路邊另外一台轎車的擋風玻璃後再墜落路面…。

這些事情原本你還以為只會在 GTA 這樣的遊戲中出現,而且 GTA 四代還不是什麼電腦都可以跑得動,但還真的有人可以讓什麼法拉利開到爆炸這樣的事情搬到現實生活上演,所以接下來再發生一些 GTA 當中發生的事情,大概也不值得意外,例如-有天你和朋友相約出去打保齡球,但沒有交通工具,所以你便走到因為一台因為紅燈停下的車輛邊,逕行開駕駛座車門,把駕駛踹下車,然後駕車揚長而去;或是你在路上有人從懷中掏出 RPG 火箭筒。

Continue reading