1
我的應用程序提供了帶圖像圖標的滾動按鈕列表。我發現,即使.png圖標文件只有2 kb,但它們的未壓縮版本大約爲150 kb,並且所有按鈕的總計使用的設備內存過多。帶圖像的UIButton的內存使用情況
本來每個按鈕是一個對象的實例中創建的,所以代碼基本上像這樣工作:
for (int i=0; i<buttonsCount; i++) {
UIImage *image = [UIImage imageNamed:@"Icon"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:image forState:UIControlStateNormal];
}
當我意識到有多少內存的圖像用,我搬到外面的影像創作對象並讓所有對象使用相同的圖像。所以現在代碼基本上是這樣工作的:
UIImage *image = [UIImage imageNamed:@"Icon"];
for (int i=0; i<buttonsCount; i++) {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:image forState:UIControlStateNormal];
}
但是,內存使用情況是相同的。顯然,UIButton正在製作自己的圖像數據副本。有沒有什麼辦法可以在許多按鈕之間「共享」圖像數據?
當我使用分配工具在樂器中運行應用程序時,「虛擬機:CG光柵數據」變得太大。
我能想到的唯一替代解決方案是在滾動時根據需要加載和卸載按鈕,但恐怕會傷害滾動性能;或者簡單地減小圖像的像素大小。