Objective C 學習筆記 (part 1): 基礎

基礎

  1. Objective C其實是C的superset,所有之前學過的C語言語法在Objective C裡面都可以使用,而Objective C為C增加了一些功能。
  2. 學習Objective C有個要注意的地方,它不像.NET與JAVA那樣會有系統作Garbage Collection,一切記憶體管理都要自己來。
  3. 建議在建立Objective C專案的時候不要使用Automatic Reference Counting,因為他並不是像Garbage Collection那麼的自動化,純粹只是在編譯的時候幫你加一些跟記憶體相關的statement而已,處理不好可能還會造成memory的問題。
  4. 為甚麼Objective C的NSString,NSOject這些物件前面都有”NS”? 其實NS的是”NeXtStep” 的縮寫, 由這家公司所開發的程式語言。
  5. Nil 與 Null的差別?Nil是一個物件,他可以被操作[nil message],但NULL就是一個空物件,操作空的物件程式會死掉,但nil不會。
  6. include的部分 < … > 與 “”…”” 的差別? 前者是系統提供的.h檔,後者是使用自己建立的。
  7. NSLog 與 printf 的差別? NSLog 是真的會寫進程式日誌檔,所以如果只是平常程式debug其實可以用printf (如果不是寫iOS的話)
  8. NSString 的表示方法 @”…” 與 C的char array 用法完全不同, 不能當成同一種東西。
  9. 變數的命名要有意義,原則上如果程式碼寫得夠好,它本身就是一個註解。

使用方法 Method

  1. [myObject someMethod:argument];
  2. 它不像JAVA是用 “.” (如 myObject.someMethod), “.” 在Objective C有別的意義存在,稍後會解釋。
  3. Method的參數寫法相當特別,它的原意是希望整個Method念起來就像一個句子一樣,參數之間用空格間隔,格式如下:
    -(void)setBrand:(NSString *)brandname isA:(NSString *)type whichcost:(int) price;

Header File

  1. 用來宣告這個物件/協定有哪些成員(如attribute與method),記得在Objective C中不能制定初值(慣性上會在init裡面作初值的指定)
  2. 格式如下:(import後面不需要分號), attribute都是包在{ }之間,method寫在{}之後,”-” 代表的是實體方法。”+”代表的是靜態方法
#import <Foundation/Foundation.h>
@interface A : NSObject {
NSString *brand;
CGFloat size;
BOOL power;
NSDate *creationDate;
}
-(void)ma;
@end
補充: 一般上我們的認知是void是一種不會回傳東西的方法,但事實上(void)本身就是一個型態,回傳的也是void。

建立實體物件的方式

  1. 儘量不要用 new, 用 alloc, 因為 new 其實包含了兩個動作: alloc 加 init, 並不是所有的物件都會以init開始, 可能會initWithXXX, 所以與其這樣不如就自己alloc之後再挑init的方法,我們常看到的寫法就會這樣:
A *a = [[A alloc] init];
[a release]; //物件都要記得release, 他們會成對出現