Sean's Note: Object-C 語法摘要

2014年10月30日 星期四

Object-C 語法摘要

類別、物件及方法

  1. Case Sensitive
  2. C:
    print("Hello %d", 1);
    Object-C:
    NSLog(@"Hello %i", 1); // NSLog 會自動換行
  3. C:
    a.print(2);
    Object-C:
    [ClassOrInstance method : params] -> [a print : 2];
  4. C:
    ClassA* A = new A();
    Object-C:
    ClassA* A = [[ClassA alloc] init];
    ClassA* A = [ClassA new];
  5. Object-C 支援 id 泛型, NSLog 用 "%p"。

迴圈、制定決策

  1. if, while, for, switch 的用法幾乎和 C 沒什麼不同。
    Note: 只有當 if (0) 的時侯為條件不成立,包括 nil 和 NO。
  2. BOOL 是用 YES/NO 表示,而不是 true/false。

類別、繼承

  1. Accessor Method 可以直接用下列語法表示:
    @interface ...
    @property int a;

    @implementation ...
    @synthesize a;   // XCode 4.5 之後 @synthesize 可省略
  2. 宣告於介面區段是屬於 public 的,而實作區段的的變數是屬於 private 的。
  3. 可用 #import "XYPoint.h" 也可用 @class XYPoint; 來引用類別,而使用
    @class 指令比較有效率,因為編譯器不需要處理整個 XYPoint.h。

類目與協定

  1. 多了 category 跟 protocol 的用法。( protocol 類似於 Java 的 interface)

Blocks


  1. 以 ^ 為開頭。
  2. 多當作 callback 來使用。
  3. 宣告在 blocks 之前的區域變數可以在 block 內引用(唯讀),除非在宣告變數時加上 __block。
  4. 在 block 裡引用 self 將會造成 Memory cycles,試著使用 weak reference:
    __weak MyClass *weakSelf self;


Ref: 精通 Object-C 程式設計 第六版

沒有留言:

張貼留言