iOS內存問題分析

內存方面常見問題:
1瞧壮、UIGraphicsEndImageContext
UIGraphicsBeginImageContext和UIGraphicsEndImageContext必須成雙出現搬设,不然會造成context泄漏。另外XCode的Analyze也能掃出這類問題膘婶。
2恒水、UIWebView
無論是打開網頁倔幼,還是執(zhí)行一段簡單的js代碼,UIWebView都會占用APP大量內存修壕。而WKWebView不僅有出色的渲染性能愈捅,而且它有自己獨立進程,一些網頁相關的內存消耗移到自身進程里慈鸠,最適合取替UIWebView蓝谨。不過目前蘋果已經強制iOS開發(fā)者使用WKWebView
3、autoreleasepool
通常autoreleased對象是在runloop結束時才釋放青团。如果在循環(huán)里產生大量autoreleased對象譬巫,內存峰值會猛漲,甚至出現OOM壶冒。適當的添加autoreleasepool能及時釋放內存缕题,降低峰值截歉。
4胖腾、互相引用
比較容易出現互相引用的地方是block里使用了self,而self又持有這個block瘪松,只能通過代碼規(guī)范來避免咸作。另外NSTimer的target、CAAnimation的delegate宵睦,是對Obj強引用记罚。使用的時候要注意。
5壳嚎、大圖片處理
舉個例子一般圖片縮放接口是這樣寫的:

  • (UIImage)scaleImage:(UIImage)image newSize:(CGSize)newSize {
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
    }
    但處理大分辨率圖片時桐智,往往容易出現,原因是-[UIImage drawInRect:]在繪制時烟馅,先解碼圖片说庭,再生成原始分辨率大小的bitmap,這是很耗內存的郑趁。解決方法是使用更低層的ImageIO接口刊驴,避免中間bitmap產生:
  • (UIImage)scaleImageWithData:(NSData)data withSize:(CGSize)size scale:(CGFloat)scale orientation:(UIImageOrientation)orientation {
    CGFloat maxPixelSize = MAX(size.width, size.height);
    CGImageSourceRef ref = CGImageSourceCreateWithData((__bridge CFDataRef)data, nil);
    NSDictionary *options = @{(__bridge id)kCGImageSourceCreateThumbnailFromImageAlways:(__bridge id)kCFBooleanTrue,(__bridge id)kCGImageSourceThumbnailMaxPixelSize:[NSNumber numberWithFloat:maxPixelSize]};
    CGImageRef imageRef = CGImageSourceCreateThumbnailAtIndex(ref, 0, (__bridge CFDictionaryRef)options);
    UIImage *resultImage = [UIImage imageWithCGImage:imageRef scale:scale orientation:orientation];
    CGImageRelease(imageRef);
    CFRelease(ref);
    return resultImage;
    }
    6、大視圖
    大視圖是指View的size過大寡润,自身包含要渲染的內容捆憎。比如微信里常見的炸群消息,通常幾千甚至幾萬行梭纹。如果把它繪制到同一個View里躲惰,那將會消耗大量內存,同時造成嚴重卡頓变抽。最好做法是把文本劃分成多個View繪制礁扮,利用TableView的復用機制知举,減少不必要的渲染和內存占用。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末太伊,一起剝皮案震驚了整個濱河市雇锡,隨后出現的幾起案子,更是在濱河造成了極大的恐慌僚焦,老刑警劉巖锰提,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異芳悲,居然都是意外死亡立肘,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門名扛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谅年,“玉大人,你說我怎么就攤上這事肮韧∪邗澹” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵弄企,是天一觀的道長超燃。 經常有香客問我,道長拘领,這世上最難降的妖魔是什么意乓? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮约素,結果婚禮上届良,老公的妹妹穿的比我還像新娘。我一直安慰自己圣猎,他們只是感情好士葫,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著样漆,像睡著了一般为障。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上放祟,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天鳍怨,我揣著相機與錄音,去河邊找鬼跪妥。 笑死鞋喇,一個胖子當著我的面吹牛,可吹牛的內容都是我干的眉撵。 我是一名探鬼主播侦香,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼落塑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了罐韩?” 一聲冷哼從身側響起憾赁,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎散吵,沒想到半個月后龙考,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡矾睦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年晦款,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枚冗。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡缓溅,死狀恐怖,靈堂內的尸體忽然破棺而出赁温,到底是詐尸還是另有隱情坛怪,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布束世,位于F島的核電站酝陈,受9級特大地震影響床玻,放射性物質發(fā)生泄漏毁涉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一锈死、第九天 我趴在偏房一處隱蔽的房頂上張望贫堰。 院中可真熱鬧,春花似錦待牵、人聲如沸其屏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽偎行。三九已至,卻和暖如春贰拿,著一層夾襖步出監(jiān)牢的瞬間蛤袒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工膨更, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留妙真,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓荚守,卻偏偏與公主長得像珍德,于是被迫代替她去往敵國和親练般。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容