但這集他有介紹個例子,我就不在這邊贅述了。
我直接紀錄相關注意事項就好。
Q1: %g..等的東西是什麼?
Q2: stringByAppendingString是什麼意思?
==================前文結束=========================
總是使用#import,而不要使用include
Model面向:
所有的class都會有個header file和implementation file
▇Header file:會公告所有他的 public API。
內容語法是:
@interface CalculatorBrain : NSObject
...
@end
所有東西都包在裡面。
其中CalculatorBrain是我們的class Name
NSObject 則是iOS內最基本的物件,所有的東西都源生於NSObject
而為了inherit from NSObject,我們就要#import NSObject的header file <Foundation/Foundation.h>。而這東西實際上就是我們要引入的framework,在裡面有我們所有需要的東西。
接著在@interface和@end之間,我們要把所有的variables─ 包含public、 protect 和 private ─放在其中,並以{ }包起來。預設情形下,variable 都是 protected。所以外面的class是看不到他的。因此外在class可以使用public method,但無法直接存取variables。
為什麼要用protected? 我個人認為是因為他是OO的語言,很常使用繼承,而通常就必須使用protected來隔離外在世界與自身血緣。
若一個function定義成 (void) setOperand:(double)anOperand;代表他回傳一個空, void。但如果前面放的是(): ()setOperand:....則代表他回傳的是一個object。
其中,setOperand: 是他的function name。一個function只有一個參數時,當我們稱呼他的時候,會把冒號一起叫。而多個參數呢?則是這樣宣告的:(NSArray *)foo:(int)zap bar:(id)pow; 此處的function name則稱呼為 foo: bar: 而他們帶的參數zap和pow 則是穿插在其中。而這是因為Ob ject-C希望他讀起來像是英文的習慣。所以當我們給參數命名時,要能結合我們想要傳遞的具體意義,並給予可讀性。
id是Object-C獨有的保留字。他的意思是可以指向任何類型的object。當然這樣可能會因傳遞不同的type而造成crash。所以Object-C有一個特有的function來詢問說是否是某種tyep,我們可以在執行之前先問這個問題,好防止crash的情形發生。
在Object-C當中,object都在heap產生或消失,所以總是有個pointer。
▇implementation file
首先要先#import 該有的 header file。
而所有的東西需要implement的,就在@implement CalculatorBrain與@end之間。且我們也不需要在 CalculatorBrain後面帶上:NSObject。
訊息的傳遞:
例子:[operation sendMessage:argument]。
- 我們在定義處前後已[ ]包起來,並用;作結尾。這樣的表達式 叫做send message colon。在[之後第一個物件則是"誰"要接收訊息。也就是這物件要送訊息的的對象。
- sendMessage:則是要送出的訊息
- 後面的argument則是send message colon所傳遞的參數。
- 當我們送訊息給接受者,接受者會作回應回來,或是作些他接收到訊息時應該做的處理。
Controller面向:
▇header file
每一個Controller都是從UIViewController所繼承的。而UIViewController定義在UIKit/UIKit.h中。
所以我們必須要#import <UIKit/UIKit.h> 這是UIKit的主要header file。而UIKit提供了button, slider, view controller和view諸如此類的...物件。
UIViewController主要功用就是如何把UIKit插入到MVC的架構當中。所以他實際上是如何表現出應用程式的行為。
IBAction跟void是完全一樣的,IBAction在定義上在某處就是void。而當你要把一個action告訴UI的時候,你就要使用IBAction。
建議創立Project時命名為大寫字母開頭。因為在iOS的應用程式當中,Class都用大寫字母開頭。一看就可以知道他是iOS的應用程式。而XCode會根據你的Project名稱來作為Templete名稱
最主要是在Classes當中,會有Project_NameViewController.h(.m) 和 Project_NameAppDelegate.h(.m)。而Delegate就是要被View所詢問的。
Controller是連結Model和View的東西,所以要將Controller->ViewController的API寫出來。
所有的東西都是在Heap中創立的。所以在前幾堂課都會是(NSString *) 這種帶有pointer的東西,再去new一個物件出來,而不會有 NSString S;這種情形。而@"test"代表一個(NSString *)的pointer指到一個NSString的物件,內容是test。
XCode Template 比較:
- Window-based Application是一種raw application。裡面沒有MVC的概念。所有的東西都是自己來,當然也比較容易控制。
- View-based Application是一種會將View和Controller的Template放在裡面,但要自己將Model寫進去。
Resource:xib是我們的View。
有Warning代表有些東西沒有找到,可能會造成不預期的問題。
特殊技巧
- XCode會自行完成接下來的字,用tab就能繼續往下跳。
- IB一樣會有基準線讓你排你的按鈕或Label的排列。也可以拉大小、或點兩下直接輸入顯示的字。
- 連結的方法是按下Ctrl+左鍵拖曳。而若是當成輸入,則是View上的Object連結到File's Owner, 若是輸出,則是File's Owner連結到輸出的位置上。
- 複製的方法是按下Alt+左鍵。 相同的東西可以用複製的。他會將File's Owner也一併複製出去。代表他的Delegate會是相同的。所以若是非相同意義的,請重拉!
- 在 Object-C 中,定義是有順序的。前面沒出現就沒辦法使用。
- 使用Build,可以只Compilier你的檔案,而不用跑到模擬器去。
- Button使用UILable來描繪出文字。
- Lazy instantiation: 當要使用的時候才init出來。
- BOOL 的值只有YES or NO。
沒有留言:
張貼留言