iOS Retain Cycle?一些容易忽略的問題

先讓我列舉一下可能會(huì)發(fā)生的場(chǎng)景吧NSTimer,UIImage,delegate, block,XXX強(qiáng)引用等等等,諸如此類的問題比比皆是,往往一個(gè)粗心就導(dǎo)致線上程序崩潰影響了用戶體驗(yàn),然后今年的升職加薪機(jī)會(huì)又沒了。以下讓我一一舉例,可能你的程序里也有這樣或那樣的問題。

1.先從NSTimer開始吧

一搜索好多呦,天朝又墻了,ss和vpX都么了,沒法Google


NSTimer.png

下面來個(gè)簡(jiǎn)單易懂還很快的倒計(jì)時(shí)

@interface XXXX ()
@property (nonatomic, weak) NSTimer *timer;
//strong和weak都可以,區(qū)別在于strong需要自己處理
@end
- (void)addTimer
{
    if(self.timer){
        return;
    }
    NSTimer *timer = [NSTimer timerWithTimeInterval:1.f target:self selector:@selector(countTime) userInfo:nil repeats:YES];
    self.timer = timer;
    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
}
- (void)countTime
{
//方法自己定制嘍
}
- (void)removeTimer
{
//如果你使用strong,而且不自己remove,那就問題大了,你的dealloc方法一定不會(huì)走!
    if (self.timer) {
        [self.timer invalidate];
        self.timer = nil;
    }
}

加時(shí)器也一樣,NSTimer只要注意釋放,就不會(huì)有問題

//第一步
@property (nonatomic, strong) NSTimer *timer;

//第二步
_timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(playTimeTick) userInfo:nil repeats:YES];

//第三步
[_timer invalidate];

2.UIImage也會(huì)導(dǎo)致崩潰?

what?.jpg

請(qǐng)看下圖中這位同學(xué),把所有的圖片都放到了Assets中,還用的[UIImage imageNamed:@"xxx"],oh!shit!假如我的app是簡(jiǎn)書,好吧老鐵,你當(dāng)我bb,我閉嘴!
這位同學(xué)不僅不是簡(jiǎn)書,而且app中還用到了大量的本地圖片,還任性的圖片不壓縮```導(dǎo)致這些圖片在加載的時(shí)候全部都緩存了。
各位同學(xué)請(qǐng)理性使用圖片緩存,根據(jù)需求來吧,畢竟一張大圖一兩個(gè)M很正常,雖然空間大但是也架不住圖片多呀

UIImage imageNamed.png

3. delegate吧這個(gè)沒人會(huì)用錯(cuò)了吧,weak屬性

防止循環(huán)引用.png

4. block這個(gè)是比較容易遇到Retain Cycle(以下都是在arc的情況下)

由于block的例子實(shí)在太多了,我就貼兩個(gè)我看過的博客吧,就不獻(xiàn)丑了,感謝這些寫博客的大神,讓我們可以看到這么多的資源,其中包括了__block,__weak,__strong,尤其是第二篇,大家可以研究一下
http://www.itdecent.cn/p/701da54bd78c
http://www.itdecent.cn/p/ee9756f3d5f6

這些都是平時(shí)不怎么起眼的問題,但是真正發(fā)生了就會(huì)暴露出很多問題,經(jīng)驗(yàn)在于積累,在于分享~

1.升級(jí)Ruby,
終端輸入:$ gem update --system
無權(quán)限時(shí)終端輸入:$ sudo gem update --system

2.更換Ruby鏡像
終端輸入:$ gem sources --remove https://rubygems.org/
終端輸入:$ gem sources -a https://gems.ruby-china.org/
終端輸入:$ gem sources -l
無權(quán)限時(shí)終端輸入:$ sudo gem install -n /usr/local/bin cocoapods

3.安裝完成
終端輸入:$ pod setup
終端輸入:$ vim Podfile

4.在Podfile文件里編輯所需要的庫:
platform :ios, '7.0'
target 'MyApp' do
pod 'AFNetworking', '~> 3.1.0'
···
···
end

5.編輯完成后
終端輸入::wq 回車
終端輸入:$ pod install
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容