Tuesday, October 2, 2012

Objective-C 101 [000]

我也寫過c/c++,但那不合我的胃口;痛苦太多,收穫太少。

這只是玩笑話,我覺得Objective-C好用的地方在有個好用的 foundation framework,整個系統也因此能做一些 c/c++ 不易完成的工作,這也是最吸引我的地方。太久沒寫東西實在不知如何下筆,就先從條列式的文章開始吧。



NSClassFromString
NSStringFromClass

在app執行的時候,class也只是一個指標,神奇的是我們可以拿到這個class的名字(一個字串),也可以用名字找到對應的class,這使得程式與腳本更容易結合,比如當我希望在遊戲的某個角落放置一個特定的物件,在設定檔裡可以直接記錄物件類別的名稱,執行時就有機會生成對應的物件了。

[AnyNSObjectClass class];
[AnyNSObject class];
則可以取得類別的指標。



[AnyNSObjectClass conformsToProtocol:@protocol(AnyProtocol)];
[AnyNSObject conformsToProtocol:@protocol(AnyProtocol)];

在c++裡,interface這個詞表示的是一個包含一組method的class,這個概念在Objective-C裡叫作protocol,Objective-C裡interface這個關鍵字被拿去定義class用了。conformsToProtocol讓我們可以知道任一物件是否實作了某個介面,作用與windows COM的QueryInterface類似。這讓我們處裡容器中的物件時,有辦法對特別的物件做處理,比如有些物件有計時器,有些沒有,那就可以設計一個「計時器protocol」來運用。



[AnyNSObject respondsToSelector:@selector(aSelector)];

這讓我們可以檢查任一物件是不是能接受指定的message,比較常用到的地方是檢查 iOS 的版本,有些message是後來才加入的,詢問物件對message的反應可以做為要不要使用某個功能的依據(沒有反應表示該device的OS版本不支援)。

No comments:

Post a Comment