雜記---不定期更新,雜記---不定期

來源:互聯網
上載者:User

雜記---不定期更新,雜記---不定期

1.data source也是一種特殊的delegate,data source負責傳輸資料給View例如data、at、count等,而delegate負責處理View的did、should、will等問題,View把需要的資料資訊或者事件資訊傳輸給dalegate,dalegate則負責回複這些資訊。

2.Block當中不能修改局部變數的值,在block中,局部變數都是唯讀,比如在block外部有一個BOOL value = YES;,如果在block內部修改value的值,這就是非法的,編譯器會報錯。當然,有一種辦法可以進行讀寫,就是在變數前面加上兩個底線和block,如:__block BOOL value = YES;,這樣就可以在block當中進行該變數的讀寫了。

原理是如果聲名了__block,編譯器就會產生一段代碼將value從棧(stack)移到堆中(heap),同時編譯器會有一個強指標指向block中的每一個變數,確保它不會在block執行完畢前就離開堆,當執行完block的時候,編譯器將資訊拷貝回堆當中,然後再移回棧當中,同時強指標會在block goes out of scope*1之前一直存在。

3.如果block不需要參數,參數的括弧可以直接省去,如果傳回值再return的時候可以直接看出來,比如return [MyClass isKindOfClass:...];,這種類型的編譯器會自動完成傳回值,所以block的傳回值類型也可以省去。

 

突然感覺學的好像有點快了,開始回頭看以前知識的詳細解釋。

*1:英語不是很好,我的理解是block也是有範圍的,比如[UIView animateWithDuration:NSTimeInterval animations:^(void)animations]這個方法,再執行完該方法的時候可能block就已經失效了,block的作用與就是這一條語句,當然這是我的猜測,如有瞭解的請務必糾正我。

相關文章

聯繫我們

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