ios高效開發--blocks相關

來源:互聯網
上載者:User

1、替換delegate     如果我們有2個viewController,a和b,當我們從a介面push到b後,在b上面觸發了一些事件,這些時間又會影響到a介面上的內容。              上面是2個介面,當我們點擊b介面的按鈕3的時候,希望a介面上文字也相應的改變了如    一般情況下我們會用delegate來實現。代理很強大,不過代理它是程式的事件邏輯也變的複雜了。 來看下用block怎麼處理。 一個block語句的定義類似於C的函數,有傳回值,有0到多個參數,接下來屬性聲明,跟一般的屬性聲明差不多: 

 typedef  (^CallBack)(  @property(nonatomic, copy)CallBack callBack;
 然後在b裡面觸發按鈕事件的時候調用block,調用前最好先檢查下是否為nil  
 1 - (IBAction)click2:(id)sender 2 { 3     if(self.callBack) 4         self.callBack(2); 5 } 6  7  8 - (IBAction)click3:(id)sender 9 {10     if(self.callBack)11         self.callBack(3);12 }

 

現在完成了調用,具體的實現在哪呢,我們回到a當中,在a中執行跳轉介面的地方,加上相關的實現。 
     SecondViewController *secondController = [[SecondViewController alloc]initWithNibName:          secondController.callBack = ^(          self.clickBtnLabel.text = [NSString stringWithFormat:           [self.navigationController pushViewController:secondController animated:YES];
在是用block的時候,要注意所有權的問題,要小心產生迴圈,那樣會導致資源無法釋放。例如在block中使用了一個指標,恰巧這個指標又是block的擁有者,那麼會產生一個循環參考,他們都是強引用,無法釋放。為了避免產生類似的問題,就需要用__weak標記block的擁有者。delegate和block在上面時候是用,要看具體情況,如果一個類的delegate裡有很多方法,那還是放在delegate裡實現吧。 2、系統定義的blockios當中還有大量系統已經定義好的block,使用這些block實現特定的一些功能,能是整體代碼更加簡潔和高效。例如遍曆字典的時候,ios就提供了:
- ()enumerateKeysAndObjectsUsingBlock:( (^)( key,  obj, BOOL *stop))block;

簡單舉個例子,我們要在字典中根據key來尋找某個value,然後把value記錄下來。

 

     NSArray *keyArray = @[, , , , ,      NSArray *valueArray = @[, , , , ,      NSDictionary *enumDict =     __block NSString *valueString =     [enumDict enumerateKeysAndObjectsUsingBlock:^( key,  obj, BOOL *         ([key isEqualToString:              valueString =             *stop =      }];

整個過程變的簡單了。

還有在實現UIView動畫的時候,block能讓我們更加簡單高效的實現很多特效。

     [UIView animateWithDuration: animations:^         animateView.alpha =      } completion:^         animateView.alpha =      }];

這段代碼實現了view透明度從1.0變到完全透明,用時0.5秒,當動畫結束後重新顯示view。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.