雜記---不定期更新,雜記---不定期
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的作用與就是這一條語句,當然這是我的猜測,如有瞭解的請務必糾正我。