當前位置:成語大全網 - 書法字典 - iOS開發中的內存問題及優化方案

iOS開發中的內存問題及優化方案

目前在iOS中加載圖像有兩種方式:

1.它引用的資源inageWithContentsFile:用於創建圖像的圖像管理方法;

2.ImageAssets它是指使用imageNamed創建圖片的管理方法;

ui圖像內存處理:

真的,在App的開發中,常用的方法無非就是1和2。

1的優缺點:

1的用法:ns string * path =【【ns bundle主包】pathforresource:@“image @ 2x“type:@“png“】;

ui image * image =【ui image imagewithcontentsofile:path】;

1:+(instance type)imagewithcontentsofile:(ns string *)filename {

nsinteger scale = 0;

{

scale = 2;//這部分是提取文件名中@符號後的數字,如果存在則為1。

}

return【【self alloc】initWithData:【ns data datawithcontentsofile:fileName scale:scale】;

}

使用這種方法有壹個限制。此圖像必須位於的根目錄中。ipa或沙盒中。根目錄是將圖片文件拖動到項目中,沙盒中的圖片被寫入或保存;

1的特點:在1的圖片管理模式下,所有圖片都是通過讀取文件數據創建的。讀取壹次文件數據將生成壹個NSData和壹個UIImage。當創建圖片時,相應的NSData將被銷毀,當UIImage的引用計數變為0時,UIImage將被自動銷毀,以確保圖片不會長期存在於內存中。

1的使用場景:由於這種方法的特點,1的方法壹般用於圖像數據非常大且圖像壹般不需要多次使用的情況,例如啟動頁面的背景(全屏圖像),有時在運行APP後顯示,有時根本不使用。

1的優點:可以管理壹張圖片的生命周期。當需要壹幅畫時,它就會被創造出來,當不需要它時,它就會被銷毀。圖片不會長時間存儲在內存中,因此不會有內存浪費。在減少大圖的內存占用方面,1是首選。

2的方式:2的初衷主要是解決雷田屏和非雷田屏的自動適配問題,也就是說解決iPhone4、iPhone3GS以及之前機型的屏幕適配問題。雖然沒有3GS,但是plus出來需要3x。

2用法:ui image * image =【ui image imagename:@“image“】;

2的特點:與1類似,2也從圖像文件中讀取圖像數據並將其轉換為UIImage,但這些圖像都打包在2中,最大的區別是圖像被緩存。相當於壹個字典,鍵是圖片名,值是圖片對象。當調用imageNamed:方法時,首先從該字典中獲取它。如果妳拿了它,直接歸還。如果妳不能嫁給它,在壹個文件中創建它並保存在這本字典中。因為字典的鍵和值都是強引用,壹旦創建,圖片就永遠不會被破壞。

2:+(instance type)imagename:(ns string *)imagename {

如果(!imageName)

返回零;

}

ui image * image = self . image buff【imageName】;

如果(圖像){

返回圖像;

}

NSString *path = @“圖像路徑“;

image =【ui image image named:];

如果(圖像){

self . image buff【imageName】= image;

}

返回圖像;

}

+(NSMutableDictionary *)image buff {

static NSMutableDictionary * _ image buff;

靜態分派_ once _ t onceToken

dispatch _ once(& amp;onceToken,^{

_ image buff =【【NSMutableDictionary alloc】init】;

});

return _ imageBuff

}

2使用場景:最重要的使用場景是圖標圖像,壹般圖標圖像的大小從3kb到20kb不等,都是小文件。

優點2:當壹個圖標需要在多個地方顯示時,其對應的UIImage對象只會被創建1次,多個地方的圖標都會使用壹個UIImage對象,減少了沙盒讀取操作。