1. 程式人生 > >iOS typeof( ) 的個人理解及簡單使用

iOS typeof( ) 的個人理解及簡單使用

__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,防止出現記憶體洩漏