基礎
- Objective C其實是C的superset,所有之前學過的C語言語法在Objective C裡面都可以使用,而Objective C為C增加了一些功能。
- 學習Objective C有個要注意的地方,它不像.NET與JAVA那樣會有系統作Garbage Collection,一切記憶體管理都要自己來。
- 建議在建立Objective C專案的時候不要使用Automatic Reference Counting,因為他並不是像Garbage Collection那麼的自動化,純粹只是在編譯的時候幫你加一些跟記憶體相關的statement而已,處理不好可能還會造成memory的問題。
- 為甚麼Objective C的NSString,NSOject這些物件前面都有”NS”? 其實NS的是”NeXtStep” 的縮寫, 由這家公司所開發的程式語言。
- Nil 與 Null的差別?Nil是一個物件,他可以被操作[nil message],但NULL就是一個空物件,操作空的物件程式會死掉,但nil不會。
- include的部分 < … > 與 “”…”” 的差別? 前者是系統提供的.h檔,後者是使用自己建立的。
- NSLog 與 printf 的差別? NSLog 是真的會寫進程式日誌檔,所以如果只是平常程式debug其實可以用printf (如果不是寫iOS的話)
- NSString 的表示方法 @”…” 與 C的char array 用法完全不同, 不能當成同一種東西。
- 變數的命名要有意義,原則上如果程式碼寫得夠好,它本身就是一個註解。
使用方法 Method
- [myObject someMethod:argument];
- 它不像JAVA是用 “.” (如 myObject.someMethod), “.” 在Objective C有別的意義存在,稍後會解釋。
- Method的參數寫法相當特別,它的原意是希望整個Method念起來就像一個句子一樣,參數之間用空格間隔,格式如下:
-(void)setBrand:(NSString *)brandname isA:(NSString *)type whichcost:(int) price;
Header File
- 用來宣告這個物件/協定有哪些成員(如attribute與method),記得在Objective C中不能制定初值(慣性上會在init裡面作初值的指定)
- 格式如下:(import後面不需要分號), attribute都是包在{ }之間,method寫在{}之後,”-” 代表的是實體方法。”+”代表的是靜態方法
#import <Foundation/Foundation.h>@interface A : NSObject {NSString *brand;CGFloat size;BOOL power;NSDate *creationDate;}-(void)ma;@end
補充: 一般上我們的認知是void是一種不會回傳東西的方法,但事實上(void)本身就是一個型態,回傳的也是void。
建立實體物件的方式
- 儘量不要用 new, 用 alloc, 因為 new 其實包含了兩個動作: alloc 加 init, 並不是所有的物件都會以init開始, 可能會initWithXXX, 所以與其這樣不如就自己alloc之後再挑init的方法,我們常看到的寫法就會這樣:
A *a = [[A alloc] init];[a release]; //物件都要記得release, 他們會成對出現