iOS typeof( ) 的個人理解及簡單使用
阿新 • • 發佈:2018-12-31
__weak typeof(self) weakSelf = self;
這個東西,由於水平不高沒看懂,就研究了一下。
typeof
typeof 是一個一元運算,放在一個運算數之前,運算數可以是任意型別。
它返回值是一個字串,該字串說明運算數的型別。
個人理解為:可以根據typeof()括號裡面的變數,自動識別變數型別並返回該型別。
下面為程式碼測試:
NSString *str; __strong typeof(str) a = @"2"; BOOL isClass = [a isKindOfClass:[NSString class]]; if (isClass == YES) { NSLog(@"yes"); }
可見的確返回了正確的格式!
運用場景
常見運用於Block
首先在下面的block程式碼中需要用到self,但是我們都知道block會對裡面的程式碼變數進行strong reference,導致記憶體洩漏。
所以在block內如果有self的話,一般都會在block外面加一句_block typeof(self)bself = self;
__block typeof(self) bself = self;
[self methodBlock:^ {
[bself doSomething];
}
用weakself作為self,防止出現記憶體洩漏