2011年6月3日 星期五

Objective-C @property

interface中宣告
@property int age <= 編譯器自動產生 get 與 set 方法。
可以用的屬性有:
屬性說明
getter=method指定物件的get method
setter=method指定物件的set method
readonly指定物件為唯獨狀態
readwrite指定物件為可讀寫狀態(預設)
assign物件的值根據帶入的值決定,不改變索引計數(預設)
copy複製物件的設定,索引計數為1,釋放舊的物件
retain保持物件的設定,提高物件的索引計數,並釋放舊的物件
nonatomic不鎖定物件(多執行緒的時候,資源會競爭)

assign:適用於基本型態變數,例如int,char,NSInteger,CGFloat...等等。
copy:適用於NSString。
retain:以NSObject為基底的class。

2011年5月27日 星期五

Objective-C Method Type

"-" 代表實體方法,實體方法用在當類別被實體化後才可取用
"+" 代表類別方法,類別方法不須實體化就可使用

2011年3月10日 星期四

Android - AndEngine的基礎事件

ANndEngine中的事件並不複雜,再繼承了BaseGameActivity之後,因為BaseGameActivity有實作了IGameInterface,所以可以用的事件如下:

public Engine onLoadEngine();
public void onLoadResources();
public void onUnloadResources();
public Scene onLoadScene();
public void onLoadComplete();
public void onGamePaused();
public void onGameResumed();

這些事件的用意也可以很容易的從method的命名看出來。
但是切記,只能Override這些事件,Android的基礎事件,例如:onCreate(),onStop()...等等,完全禁止使用,否則輕則logcat會出現提示說明不能使用,然後當掉,重則只有exception的訊息,然後直接當掉。

2011年3月9日 星期三

Android - logcat不會顯示

有時候常常會遇到模擬器重開,但是Eclipse沒有重開的情況下,logcat的訊息不會顯示,要重開Eclipse又有點麻煩。後來我發現了一個解決方式,見下圖,對著圖中紅色框框的地方按滑鼠右鍵,訊息一下子就噴出來啦~

2011年3月8日 星期二

Android - 記憶卡相關

取得記憶卡狀態
Environment.getExternalStorageState()
狀態有以下幾種:
MEDIA_BAD_REMOVAL:不當移除。未經卸載就拔除記憶卡。
MEDIA_CHECKING:檢查中。
MEDIA_MOUNTED:已掛載,並且可讀寫。
MEDIA_MOUNTED_READ_ONLY:已掛載,但是只能讀取。
MEDIA_NOFS:未格式化或是格式無法讀取。
MEDIA_REMOVED:已移除。記憶卡槽偵測不到有記憶卡。
MEDIA_SHARED:記憶卡未掛載,使用的是usb分享的外部儲存裝置。
MEDIA_UNMOUNTABLE:有偵測到記憶卡,但是無法掛載。可能是記憶卡壞掉或是記憶卡分割區壞掉了。
MEDIA_UNMOUNTED:有偵測到記憶卡,但是尚未掛載。

取得記憶卡根路徑
Environment.getExternalStorageDirectory().getPath()

取得記憶卡容量
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());

// 未使用(單位:bytes)
long sdFreeSize = stat.getAvailableBlocks() * stat.getBlockSize();

// 總容量(包含保留空間,單位:bytes)
long sdTotalSize = stat.getFreeBlocks() * stat.getBlockSize();

// 已使用(單位:bytes)
long sdUsedSize = sdTotalSize - sdFreeSize ;

ps.1 gigabytes = 1024 megabytes = 1024*1024 kilobytes = 1024 * 1024 * 1024 bytes