網頁

2013年2月24日 星期日

一行一行講:iphone app dev 中 .h 在做什麼

[iphone app 開發]

xxxviewController.h


1. 是我們想要幫class加入新的"method"和"interface"還有準備要使用的"變數"的預先 "宣告" 的地方。實作會在 .m 當中,但是一些屬性設定,就得在.h 中先處理好。

2. 換個簡單的說法:標頭檔.h 是讓你宣告現在在用的這個class....
a. 是否繼承任何東西
b.會用到(包含的) 實體變數 (instance variable), 什麼樣的特性(property)方法(method)


用藍色的字一行一行講





//
//  xxxxxViewController.h
//  


#import <UIKit/UIKit.h>
#import<MessageUI/MFMailComposeViewController.h>
//#import 是在compiler 時期將另外一個檔案整合到次檔案中用的,總是import 其他人的.h
//為的就是有了別人的.h 之後,就可以用他在.h 中所宣告的方法,常數等等資源。



@interface xxxxViewController : UIViewController
//@interface 告訴compiler 後面將會是你宣告的class , 也就是 xxxxViewController
//而他後面的冒號 (:) 說明了xxxxViewController 繼承了父類別 UIViewController。
//ps. Objective-c 不支援多重繼承。

<UIPickerViewDataSource, UIPickerViewDelegate,MFMailComposeViewControllerDelegate>{
    // 這邊在 < > 裡面列出了這個class 也就是xxxxViewController 將會遵照哪些協定。

   //下面就是變數宣告的地方,型別就是看你要的變數準備接誰的值,或是拿來給誰用。
  // ex: 我待會要接一個UIpicker 的值進來,那當然我在.h 先宣告一個 
  // UIPickerView *emailPicker_; 等著到時候 .m 可以拿來用。
    
    NSArray* activities_;
    NSArray* actions_;
    UIPickerView *emailPicker_;//為了之後取得picker view 的內容
}
// 上面這個 <aaa,bbb,ccc>{..... } 的block 代表介面欄位宣告區段。
//結束這個區段之後,你可以開始在下面宣告"內容特性(property)"


//IBOutlet 宣告,讓IB知道你有某個東西要連結
@property (nonatomic, retain) IBOutlet UIPickerView *emailPicker;
//@property 這會讓compiler 知道待會後面宣告的東西會支援 getter and setter
//(nonatomic, retain) 這個就是特性,只的就是後面宣告的東西所擁有的特性,下一篇
//會專門講。 
// 接者 IBoutlet 這個就是讓 interface Builder 在你拉(hook)UI 到程式碼時,他能夠識別
//出來,某個UI值就是要看後面宣告的東西動作。
//最後,當然就是宣告一個值,他會包含上述這些設定,而他的型別,就跟
//你在 上面欄位宣告區間裡一樣,只有名稱差一個 _ , 拿來當做區別。
//為了好辨認而已,我們通常命名會一樣,反正之後會把兩個sync 在一起。
//但是實際上存值的地方,還是在欄位宣告裡xxxxx_ 當中。
//@property 告訴objective-c 之後宣告的特定值(emailPicker)可以用 "." 來存取方法。


//當寄出按鈕按下時使用
-(IBAction)sendButtonPressed:(id)sender;

// - 號代表他是 instance method , + 號代表 class method。此外
//objective-c 中的方法都是public的
//IBAction 一樣是為了讓interface builder 能夠連結進來用的。
//當然 sendButtonPressed 這個 instance method 名字是我們自己定的,準備在
//.m 中實作。
//(id) sender 這個表示他接受傳入值sender 型別是id
// 可以有三種選擇
// 1. 不含引數,
//2.一個型別是id 的引數 
//3. 兩個引數, 一個是傳送者的id, 一個是觸發此事件的事件 UIEvent*


@end
//結束類別宣告。






沒有留言:

張貼留言