神奇的RAC宏,神奇RAC宏

來源:互聯網
上載者:User

神奇的RAC宏,神奇RAC宏
先說說RAC中必須要知道的宏

  1. 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類型),都會自動執行:

  1. [TARGET setValue:value ?: NIL_VALUE forKeyPath:KEYPATH]; 
 數字值會升級為NSNumber *,當setValue:forKeyPath時會自動降級成基本類型(int, float ,BOOL等),所以RAC綁定一個基本類型的值是沒有問題的
  1. RACObserve(TARGET, KEYPATH) 
 作用是觀察TARGET的KEYPATH屬性,相當於KVO,產生一個RACSignal 最常用的使用,和RAC宏綁定屬性:
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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.