在介紹block迴圈引用前我們先瞭解一下typeof。 typeof是什麼??? typeof 是一個一元運算,放在一個運算數之前,運算數可以是任意類型。 它返回值是一個字元串,該字元串說明運算數的類型。 一、對於數字類型的操作數而言,typeof返回的值是number。比如說:typeof(1), ...
在介紹block迴圈引用前我們先瞭解一下typeof。
typeof是什麼???
typeof 是一個一元運算,放在一個運算數之前,運算數可以是任意類型。 它返回值是一個字元串,該字元串說明運算數的類型。
一、對於數字類型的操作數而言,typeof返回的值是number。比如說:typeof(1),返回的值就是number。 上面是舉的常規數字,對於非常規的數字類型而言,其結果返回的也是number。比如typeof(NaN),NaN在 JavaScript中代表的是特殊非數字值,雖然它本身是一個數字類型。
二、對於字元串類型,typeof返回的值是string。比如typeof("123")返回的值是string。
三、對於布爾類型,typeof返回的值是boolean.比如typeof(true)返回的值是boolean。
四、對於對象、數組、null 返回的值是 object 。比如typeof(window),typeof(document),typeof(null)返回的值都是object。
五、對於函數類型,返回的值是 function。比如:typeof(eval),typeof(Date)返回的值都是function。
六、如果運算數是沒有定義的(比如說不存在的變數、函數或者undefined),將返回undefined。比如:typeof(sss)、typeof(undefined)都返回undefined。
瞭解typeoy後就可以瞭解block的弱引用
為什麼要用弱引用???
我們知道block通長是與strong想匹配的,但是MRC遺留的問題我們也需要尊重,因此很多時候也會發現copy,在ARC中這兩種的效果是一樣的。既然看到strong,copy當然就要考慮到強引用問題。
我們可以這麼理解⬇️
對象有一個Block屬性,然而這個Block屬性中又引用了對象的其他成員變數,那麼就會對這個變數本身產生強引用,那麼變數本身和他自己的Block屬性就形成了迴圈引用。因此我們需要對其進行處理進行弱引用。
怎麼實現弱引用???
下麵是簡單的代碼:
- __weak typeof(self) weakSelf = self;
- self.Block = ^ {
- if (weakSelf.people) {
- weakSelf.people.name = @"旭寶愛吃魚";
- }
- }; 這裡只是簡單的介紹,想要掌握還是需要多加練習。