/* syntax highlight */ /* end of syntax highlight */

2010年12月12日 星期日

iphone app 開發 (二十三) 深度解析 Objective-C method

Bookmark and Share

螢幕快照 2010-12-13 上午10.49.57

本篇將會深入來談 Objective 的 method 部份

主要是筆記我在收看 Developing Apps for iOS (SD) 裡面的 Objective-C and Foundaton Frameworks 的影片的心得,強烈建議各位可以去看看

這篇文章將以圖帶文的方式來做說明

 

Objective C 的 method 在還看不懂的時候會覺得很醜,所以我們把它拆開來看看

現在有一句 method

-(NSArray *)shipAtPoint:(CGPoint)bombLocation withDamage:(BOOL)damaged

螢幕快照 2010-12-13 上午10.50.44

其中 NSArray 是回傳型態 (Return Type)

前面的 - 號是指 instance method

 

螢幕快照 2010-12-13 上午10.52.45

Objective-C 的特殊用法就是可以把 method 拆成幾個部份

這個例子就是把 ShipAtPoint : wthDamage 拆成前後兩部份

 

螢幕快照 2010-12-13 上午10.54.11

: 後面的是 method 的回傳型臺, 一樣分前後

 

螢幕快照 2010-12-13 上午10.54.54

( return type ) argument ,指參數

 

螢幕快照 2010-12-13 上午10.55.38

有時候會發生程式碼非常長的情況,作者是建議以 method name 為每行的開頭

 

螢幕快照 2010-12-13 上午10.56.38

IBAction 回傳型態指的是將 GUI 送出的訊息回傳給 Controller 的 return type

 

螢幕快照 2010-12-13 上午11.00.49

(1) 記得用 - 開頭的 method 指的是 instance method

(2) 通常都是用 - 號開頭

(3) 可以存取 instance variable (區域變數)

(4) 可以送訊息給 self 和 super 父類別

 

 

螢幕快照 2010-12-13 上午11.04.29

(1) 用 + 開頭的則是 class method

(2) class method 是在「分配記憶體、只有一個 instance 的時候、功能 class 」的時候使用

(3) 下面幾個 case 就是使用 class method 的時機, *brain 該行是指為了分配記憶體所宣告的,*theMotherShip 則是只會有唯一 instance 的 class , turretsOnshipOfSize 則是功能 method

 

螢幕快照 2010-12-13 上午11.07.07

Instance variable 其實有三種設定的型態…

 

螢幕快照 2010-12-13 上午11.10.52 

不過作者說還是把所有 variable 設為 private 是最好的

並且使用 @property 與逗點 來取得 instance variable 的值

 

螢幕快照 2010-12-13 上午11.15.01

source code 第 6 行有 @property int eyes 其實已經自動把 set/get 設定好了, 只是記得要在 .m 檔裡面實作

 

螢幕快照 2010-12-13 上午11.20.03

這邊也可以再用 @synthesize 這個語法幫忙實做 eye 就可以省略部份程式碼

 

螢幕快照 2010-12-13 上午11.21.56

@synthesize 會自動實作 get / set 但是你也可以再自己寫過來覆蓋掉這個結果

 

螢幕快照 2010-12-13 上午11.26.23

使用 propery 的好處是讓整體結構與 C structs 更像,且可以先在事前做宣告, 只是記得要實作

 

螢幕快照 2010-12-13 上午11.27.38

螢幕快照 2010-12-13 上午11.28.21

記得在存取 instance variable 的時候要用 self.object.property 這種方式來存取

 

 螢幕快照 2010-12-13 上午11.31.18

有一個方法可以連 interface 都設定成 private 的

做法如上圖

只要把 @interface 那段也寫在 .m 檔裡面,並且用 ObjectName ( ) 方式宣告即可

只不過這種方式就不能再產生 instance 了

 

此篇文章涉及一些 C++ 的基礎

對於沒寫過 C++ 的人應該會有些吃力

如果有讀者有問題也歡迎留言喔 ~

0 意見:

張貼留言

Related Posts Plugin for WordPress, Blogger...