2010年12月8日 星期三

[hw2] iOS development

第二個作業主要是幫第一個作業加上記憶體回收還有一些變數運算的功能。

ObjC的記憶體管理機制是個半自動的reference count,不像Java, Python會自動回收,也不像C/C++完全不會回收。有些情況要到的物件會自動回收,有些時候的不會,會自動回收的時候你又手動釋放就會當掉,沒有自動回收的時候沒有手動釋放就會記憶體流失。真的是蠻討厭的,難怪這麼多人喜歡用Java,要物件就new就好了。

這次還練習怎麼用Xcode的工具,編譯器有個選項可以開啟,開了之後原本用reference count的物件,count歸零之後不會消失,而是有再次去用到這個應該已經被釋放的物件的時候,會在除錯器裡面跳出你用了哪個不應該用的物件。不過一開始也沒有開成功,因為參數名稱是NSZombieEnabled,讓我找好久才發現多打一個d....另外一個程式是instruments,可以監控程式的記憶體使用情況還可以做profiling,有發生memory leak時可以知道是哪個函式配置的記憶體沒有釋放,profiling時候哪個函式跑幾秒都有模擬出來,真是方便,不知道visual c++有沒有對應的功能?

上次程式把Div0, NaN這些判斷錯誤邏輯放在Controller,這次換成放到Model裡面,突然變得很好寫,都不會有一堆例外狀況要處理。第一次覺得放程式碼的位置有這麼重要。
這次程式最大的問題是輸入變數的時候,顯示部分的邏輯和原本的完全不一樣。在想要怎麼在不動到原本正常運作的顯示部分的程式,但是要支援切換到另外一個顯示部分想很久。最後另外開一個字串,原本部分照算,只是切換到變數時候顯示另外一個字串,好像應該是很直覺的方法想好久,果然對寫gui的程式都不太熟 XD

ioshw2

沒有留言: