圖片的加載方式 iOS 目前有2種:
十載專注成都網(wǎng)站制作,企業(yè)網(wǎng)站設(shè)計(jì),個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于企業(yè)網(wǎng)站設(shè)計(jì),高端網(wǎng)頁制作,對混凝土攪拌機(jī)等多個(gè)行業(yè),擁有豐富的營銷推廣經(jīng)驗(yàn)。
1.Resource 它是指inageWithContentsFile:創(chuàng)建圖片的圖片管理方式;
2.ImageAssets 它是指使用imageNamed:創(chuàng)建圖片的圖片的管理方式;
UIImage內(nèi)存處理:
真是的App開發(fā)中,常用的無非是1和2兩種方式
1的優(yōu)缺點(diǎn):
1的使用方式:NSString *path =[[NSBundle mainBundle]pathForResource:@"image@2x" type:@"png"];
UIImage *image = [UIImage imageWithContentsOfFile:path];
1的內(nèi)部實(shí)現(xiàn)方式:+ (instancetype)imageWithContentsOfFile:(NSString *)fileName {
NSUInteger scale = 0;
{
scale = 2;//這一部分是提取fileName中@號后面的那個(gè)數(shù)字,如果存在則為1
}
return [[self alloc] initWithData:[NSData dataWithContentsOfFile:fileName scale:scale]];
}
這種方式使用的時(shí)候會有個(gè)局限性,這個(gè)圖片必須是在.ipa的根目錄或者沙盒中。根目錄就是把圖片文件拖到工程中,沙盒中的圖片是寫入進(jìn)去或者存進(jìn)去的;
1的特性:在1的圖片管理方式中,所有的圖片創(chuàng)建都是通過讀取文件數(shù)據(jù)得到的,讀取一次文件數(shù)據(jù)就會產(chǎn)生一次NSData以及產(chǎn)生一個(gè)UIImage,當(dāng)圖片創(chuàng)建好后會銷毀對應(yīng)的NSData,當(dāng)UIImage的引用計(jì)數(shù)變?yōu)?的時(shí)候自動銷毀UIImage,這樣的話就可以保證圖片不會長期存在內(nèi)存中。
1的使用場景:由于這種方法的特性,所以1得方法一般用在圖片數(shù)據(jù)很大,圖片一般不需要多次使用的情況,比如引導(dǎo)頁面的背景(圖片全屏),有時(shí)候運(yùn)行APP才顯示,有時(shí)候根本就用不到。
1的優(yōu)點(diǎn):圖片的生命周期可以得到管理,當(dāng)需要圖片的時(shí)候就創(chuàng)建一個(gè),當(dāng)不需要圖片的時(shí)候就讓他銷毀,圖片不會長期的保存在內(nèi)存中,因此不會有內(nèi)存浪費(fèi),在減少大圖的內(nèi)存占用中,1方式優(yōu)先。
2的方式:2的設(shè)計(jì)初衷主要是為了解決自動適配Retian屏和非Retian屏,也就是說為了解決iPhone4和iPhone3GS以及以前的機(jī)型的屏幕適配,雖然沒有3GS了,但是plus出來了,需要3x
2的使用方式:UIImage *image = [UIImage imageName:@"image"];
2的特性:與1相似,2也是從圖片文件中讀取圖片數(shù)據(jù)轉(zhuǎn)化成UIImage,只不過這些圖片都打包在2中,最大的區(qū)別就是圖片有緩存。相當(dāng)于與一個(gè)字典,key是圖片名,value是圖片對象。調(diào)用imageNamed:方法的時(shí)候先從這個(gè)字典中去取,如果取到就直接返回,如果娶不到再去文件中創(chuàng)建,然后保存在這個(gè)字典中。由于字典的key和value都是強(qiáng)引用,所以一旦創(chuàng)建后的圖片永不銷毀。
2的內(nèi)部實(shí)現(xiàn)方式:+(instancetype)imageName:(NSString*)imageName {
if(!imageName)
return nil;
}
UIImage *image = self.imageBuff[imageName];
if(image){
return image;
}
NSString *path = @"image Path";
image = [UIImage imageNamed: ?];
if(image){
self.imageBuff[imageName] = image;
}
return image;
}
+ (NSMutableDictionary*)imageBuff {
static NSMutableDictionary *_imageBuff;
static dispatch_once_t onceToken;
dispatch_once(onceToken,^{
_imageBuff = [[NSMutableDictionary alloc]init];
});
return _imageBuff;
}
2的使用場景:最主要的使用場景就是icon類的圖片,一般的icon類的圖片大小在3kb到20kb不等,都是一些小文件
2的優(yōu)點(diǎn):當(dāng)一個(gè)icon在多個(gè)地方需要被顯示的時(shí)候,其對應(yīng)的UIImage對象只會被創(chuàng)建1次,而且多個(gè)地方的icon都將會共用一個(gè)UIImage對象,減少沙盒的讀取操作。
ios12.4.9占30GB內(nèi)存。iOS是由蘋果公司開發(fā)的移動操作系統(tǒng)。蘋果公司最早于2007年1月9日的Macworld大會上公布這個(gè)系統(tǒng),最初是設(shè)計(jì)給iPhone使用的,后來陸續(xù)套用到iPodtouch,iPad以及AppleTV等產(chǎn)品上。
ios介紹
iOS與蘋果的MacOSX操作系統(tǒng)一樣,屬于類Unix的商業(yè)操作系統(tǒng)。原本這個(gè)系統(tǒng)名為iPhoneOS,因?yàn)閕Pad,iPhone,iPodtouch都使用iPhoneOS,所以2010WWDC大會上宣布改名為iOS。2016年1月,隨著9點(diǎn)2點(diǎn)1版本的發(fā)布,蘋果修復(fù)了一個(gè)存在了3年的漏洞。
該漏洞在iPhone或iPad用戶在酒店或者機(jī)場等訪問帶強(qiáng)制門戶的網(wǎng)絡(luò)時(shí),登錄頁面會通過未加密的HTTP連接顯示網(wǎng)絡(luò)使用條款。在用戶接受條款后,即可正常上網(wǎng),但嵌入瀏覽器會將未加密的Cookie分享給Safari瀏覽器。
ios15.0.2需要7.26gb的內(nèi)存。
iOS是由蘋果公司開發(fā)的移動操作系統(tǒng)。蘋果公司最早于2007年1月9日的Macworld大會上公布這個(gè)系統(tǒng),最初是設(shè)計(jì)給iPhone使用的,后來陸續(xù)套用到iPod touch、iPad上。iOS與蘋果的macOS操作系統(tǒng)一樣,屬于類Unix的商業(yè)操作系統(tǒng)。
原本這個(gè)系統(tǒng)名為iPhone OS,因?yàn)閕Pad,iPhone,iPod touch都使用iPhone OS,所以2010年WWDC上宣布改名為iOS(iOS為美國Cisco公司網(wǎng)絡(luò)設(shè)備操作系統(tǒng)注冊商標(biāo),蘋果改名已獲得Cisco公司授權(quán))。
發(fā)展歷程
2007年1月9日蘋果公司在Macworld展覽會上公布,當(dāng)時(shí)喬布斯稱之為“iPhone runs OS X”,同年6月第一版iOS操作系統(tǒng)發(fā)布。
2007年10月17日,蘋果公司發(fā)布了第一個(gè)本地化iPhone應(yīng)用程序開發(fā)包(SDK),并且計(jì)劃在2月發(fā)送到每個(gè)開發(fā)者以及開發(fā)商手中。
2008年3月6日,蘋果發(fā)布了第一個(gè)測試版開發(fā)包,并且將“iPhone runs OS X”改名為“iPhone OS”。
2008年9月,蘋果公司將iPod touch的系統(tǒng)也換成了iPhone OS。
2010年2月27日,蘋果公司發(fā)布iPad,iPad同樣搭載了”iPhone OS”。這年,蘋果公司重新設(shè)計(jì)了“iPhone OS”的系統(tǒng)結(jié)構(gòu)和自帶程序。
2010年6月,蘋果公司將“iPhone OS”改名為“iOS”,同時(shí)還獲得了思科iOS的名稱授權(quán)。
使用引用計(jì)數(shù)的方式對創(chuàng)建的對象進(jìn)行內(nèi)存的管理操作;有強(qiáng)引用指向(retain)那么引用計(jì)數(shù)+1,強(qiáng)引用被置為nil(release)那么引用計(jì)數(shù)-1;對象超過作用域該對象的引用計(jì)數(shù)如果為0,則系統(tǒng)會清理對象占用的內(nèi)存空間,目前內(nèi)存管理的方式分為MRC和ARC兩種.
當(dāng)開發(fā)中遇到在某個(gè)作用域內(nèi)部產(chǎn)生大量的autorelease對象導(dǎo)致內(nèi)存激增,需要考慮手動創(chuàng)建autoreleasepool來釋放局部變量的情況!
遇到這種情況,就需要排查控制器中出現(xiàn)的內(nèi)存泄露了;
建議硬盤256+,內(nèi)存8G+,畢竟我們做開發(fā),很多軟件都是1-2G以上,運(yùn)存自然占用不少。
標(biāo)題名稱:ios開發(fā)應(yīng)用內(nèi)存,ios app內(nèi)存
本文路徑:http://m.rwnh.cn/article12/dsdhigc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、定制網(wǎng)站、搜索引擎優(yōu)化、靜態(tài)網(wǎng)站、域名注冊、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)