国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

ARC下內(nèi)存泄露問題

2019-11-14 17:54:06
字體:
供稿:網(wǎng)友

ARC下內(nèi)存泄露問題

ARC下內(nèi)存泄露問題,有需要的朋友可以參考下。

 

iOS提供了ARC功能,很大程度上簡(jiǎn)化了內(nèi)存管理的代碼。

但使用ARC并不代表了不會(huì)發(fā)生內(nèi)存泄露,使用不當(dāng)照樣會(huì)發(fā)生內(nèi)存泄露。

下面列舉兩種內(nèi)存泄露的情況。

1,循環(huán)參照

A有個(gè)屬性參照B,B有個(gè)屬性參照A,如果都是strong參照的話,兩個(gè)對(duì)象都無法釋放。

這種問題常發(fā)生于把delegate聲明為strong屬性了。

例,

@interface SampleViewController

@PRoperty (nonatomic, strong) SampleClass *sampleClass;

@end

@interface SampleClass

@property (nonatomic, strong) SampleViewController *delegate;

@end

上例中,解決辦法是把SampleClass 的delegate屬性的strong改為assing即可。

2,死循環(huán)

如果某個(gè)ViewController中有無限循環(huán),也會(huì)導(dǎo)致即使ViewController對(duì)應(yīng)的view關(guān)掉了,ViewController也不能被釋放。

這種問題常發(fā)生于animation處理

例,

比如,

CATransition *transition = [CATransition animation];

transition.duration = 0.5;

tansition.repeatCount = HUGE_VALL;

[self.view.layer addAnimation:transition forKey:"myAnimation"];

上例中,animation重復(fù)次數(shù)設(shè)成HUGE_VALL,一個(gè)很大的數(shù)值,基本上等于無限循環(huán)了。

解決辦法是,在ViewController關(guān)掉的時(shí)候,停止這個(gè)animation。

-(void)viewWillDisappear:(BOOL)animated {

[self.view.layer removeAllAnimations];

}

內(nèi)存泄露的情況當(dāng)然不止以上兩種。

即使用了ARC,我們也要深刻理解iOS的內(nèi)存管理機(jī)制,這樣才能有效避免內(nèi)存泄露。

發(fā)生內(nèi)存泄露實(shí)在找不出問題所在的話,將那個(gè)對(duì)象直接賦值為nil,因?yàn)锳RC下對(duì)象沒有指針指向,馬上會(huì)被釋放。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 乌鲁木齐县| 汉寿县| 宿迁市| 三门县| 高尔夫| 双桥区| 贡觉县| 三亚市| 奇台县| 多伦县| 临高县| 兰坪| 三门县| 东宁县| 利辛县| 通河县| 大余县| 宿州市| 广平县| 宣威市| 宁蒗| 宜章县| 阿勒泰市| 广德县| 高安市| 罗田县| 五家渠市| 读书| 彭山县| 永修县| 黎城县| 舒兰市| 乐陵市| 舞钢市| 扎鲁特旗| 香港 | 大新县| 成安县| 威海市| 师宗县| 嘉峪关市|