類別、物件及方法
- Case Sensitive
- C:
print("Hello %d", 1);
Object-C:
NSLog(@"Hello %i", 1); // NSLog 會自動換行 - C:
a.print(2);
Object-C:
[ClassOrInstance method : params] -> [a print : 2]; - C:
ClassA* A = new A();
Object-C:
ClassA* A = [[ClassA alloc] init];
ClassA* A = [ClassA new]; - Object-C 支援 id 泛型, NSLog 用 "%p"。
迴圈、制定決策
- if, while, for, switch 的用法幾乎和 C 沒什麼不同。
Note: 只有當 if (0) 的時侯為條件不成立,包括 nil 和 NO。 - BOOL 是用 YES/NO 表示,而不是 true/false。
類別、繼承
- Accessor Method 可以直接用下列語法表示:
@interface ...
@property int a;
@implementation ...
@synthesize a; // XCode 4.5 之後 @synthesize 可省略 - 宣告於介面區段是屬於 public 的,而實作區段的的變數是屬於 private 的。
- 可用 #import "XYPoint.h" 也可用 @class XYPoint; 來引用類別,而使用
@class 指令比較有效率,因為編譯器不需要處理整個 XYPoint.h。
類目與協定
- 多了 category 跟 protocol 的用法。( protocol 類似於 Java 的 interface)
Blocks
- 以 ^ 為開頭。
- 多當作 callback 來使用。
- 宣告在 blocks 之前的區域變數可以在 block 內引用(唯讀),除非在宣告變數時加上 __block。
- 在 block 裡引用 self 將會造成 Memory cycles,試著使用 weak reference:
__weak MyClass *weakSelf self;
Ref: 精通 Object-C 程式設計 第六版
沒有留言:
張貼留言