先說說RAC中必須要知道的巨集 使用: 這個巨集是最常用的,RAC()總是出現在等號左邊,等號右邊是一個RACSignal,表示的意義是將一個對象的一個屬性和一個signal綁定,signal每產生一個value(id類型),都會自動執行: 數字值會升級為NSNumber *,當setValue:for ...
先說說RAC中必須要知道的巨集
- RAC(TARGET, [KEYPATH, [NIL_VALUE]])
RAC(self.outputLabel, text) = self.inputTextField.rac_textSignal; RAC(self.outputLabel, text, @"收到nil時就顯示我") = self.inputTextField.rac_textSignal;
這個巨集是最常用的,RAC()總是出現在等號左邊,等號右邊是一個RACSignal,表示的意義是將一個對象的一個屬性和一個signal綁定,signal每產生一個value(id類型),都會自動執行:
- [TARGET setValue:value ?: NIL_VALUE forKeyPath:KEYPATH];
- RACObserve(TARGET, KEYPATH)
RAC(self.outputLabel, text) = RACObserve(self.model, name);
上面的代碼將label的輸出和model的name屬性綁定,實現聯動,name但凡有變化都會使得label輸出
@weakify(Obj); @strongify(Obj);
這對巨集在 RACEXTScope.h 中定義,RACFramework好像沒有預設引入,需要單獨import
他們的作用主要是在block內部管理對self的引用:@weakify(self); // 定義了一個__weak的self_weak_變數 [RACObserve(self, name) subscribeNext:^(NSString *name) { @strongify(self); // 局域定義了一個__strong的self指針指向self_weak self.outputLabel.text = name; }];
這個巨集為什麼這麼弔,前面加@,其實就是一個啥都沒乾的@autoreleasepool {}前面的那個@,為了顯眼罷了。 這兩個巨集一定成對出現,先weak再strong