今天就跟大家聊聊有關(guān)怎么在Objective-C中實(shí)現(xiàn)block循環(huán)引用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司是一家服務(wù)多年做網(wǎng)站建設(shè)策劃設(shè)計(jì)制作的公司,為廣大用戶(hù)提供了網(wǎng)站制作、做網(wǎng)站,成都網(wǎng)站設(shè)計(jì),1元廣告,成都做網(wǎng)站選創(chuàng)新互聯(lián)公司,貼合企業(yè)需求,高性?xún)r(jià)比,滿(mǎn)足客戶(hù)不同層次的需求一站式服務(wù)歡迎致電。block中直接使用self會(huì)強(qiáng)引用。
self.myBlock = ^() { [self doSomething]; };
或者使用了對(duì)象的屬性
self.myBlock = ^() { NSString *str = _str; NSString *str2 = self.str; };
在這樣的情況下,self強(qiáng)引用block,block也持有該對(duì)象,導(dǎo)致循環(huán)引用。
要注意的是,只有在self強(qiáng)引用block的時(shí)候才會(huì)有這樣的問(wèn)題。一般使用GCD或NSOperation時(shí)使用的內(nèi)聯(lián)block是不會(huì)出現(xiàn)循環(huán)引用的。
加入weak self
__weak __typeof(self) weakSelf = self; self.myBlock = ^() { [weakSelf doSomething]; };
這樣,self持有了block,但block對(duì)self是弱引用,就不會(huì)導(dǎo)致循環(huán)引用了。
而在[weakSelf doSomething]過(guò)程中,self是不會(huì)釋放的,完美。
但是,如果是這樣呢?
__weak __typeof(self) weakSelf = self; self.myBlock = ^() { [weakSelf doSomething]; [weakSelf doSomething2]; };
在[weakSelf doSomething]和[weakSelf doSomething2]之間,self可能會(huì)被釋放掉。這可能會(huì)導(dǎo)致奇怪的問(wèn)題。
加入strong self
__weak __typeof(self) weakSelf = self; self.myBlock = ^() { __strong __typeof(self) strongSelf = weakSelf; [strongSelf doSomething]; [strongSelf doSomething2]; };
看完上述內(nèi)容,你們對(duì)怎么在Objective-C中實(shí)現(xiàn)block循環(huán)引用有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝大家的支持。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。