weakself的一種寫法

2021-07-06 04:55:41 字數 783 閱讀 5426

前言在不久前看afnetworking的原始碼時候發現了這麼一句:

// 不知道這行**的使用場景的同學你該去自習看看arc的注意事項和block的使用了

// afnetworking的寫法

__weak __typeof(&*self)weakself = self;

// 我之前一直這麼寫的

__weak __typeof(self) weakself = self;

// 或者這麼寫

__weak ***viewcontroller *weakself = self;

// 或者這麼寫

__weak

id weakself = self;

當時也沒注意為什麼要寫成&*這種樣子… 今天再想起來, 搜了一圈, 終於讓我找到原因了…

正文其實以上的4種寫法都是對的

afnetworking裡面不寫成以上這行**的原因是因為 typeof(self) 會被解析成 ***viewcontroller *const __strong (假如你的self是***viewcontroller的話), 這樣的話就就會報錯…(沒有老版本, 沒有驗證, 不過看網上的結論應該是這樣了)

不過, 如果你寫成了__typeof(self)也沒什麼問題… 那是因為在llvm3.1之後已經不會出現以上的情況了… ( via )

總結todo: arc的文件值得仔細看看

之前推薦的 multithreading and memory management for ios and os x 是一本好書

Makefile的一種通用寫法

管理linux環境下的c c 大型專案,如果有乙個智慧型的build system會起到事半功倍的效果,本文描述linux環境下大型工程專案子目錄makefile的一種通用寫法,使用該方法,當該子目錄內的檔案有增刪時無需對makefile進行改動,可以說相當的智慧型。下面先貼 為減小篇幅,一些非關鍵...

一種快取注入的寫法

1 我們需要乙個快取介面 public inte ce cacheservice 2 實現這個介面 public class cacheservuceimpl implements cacheservice override public void set string key,object val...

一種較為便捷的快排寫法

思維 通過設定哨兵a low 從a low 1 到a high 依次與a low 進行比較,最終目的是使哨兵左邊部分元素都比哨兵元素小,右邊部分元素都比哨兵元素大。然後對左右兩部分分別進行遞迴呼叫,最終實現所有元素的排序。ps 此處是通過自增指標cur,將low之後比哨兵元素小的元素全部交換到前面部...