亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍

ios 內(nèi)存優(yōu)化和調(diào)試技巧
來源:易賢網(wǎng) 閱讀:1379 次 日期:2014-12-08 14:09:13
溫馨提示:易賢網(wǎng)小編為您整理了“ios 內(nèi)存優(yōu)化和調(diào)試技巧”,方便廣大網(wǎng)友查閱!

基礎(chǔ)部分

1: 圖片內(nèi)存大小小結(jié)

a: 圖片:是占用內(nèi)存的大戶,尤其是手機游戲圖片資源眾多。對圖片資源在內(nèi)存中占用量的計算成為j2me游戲開發(fā)者的經(jīng)常性工作,cocomo來解釋一下如何計算圖片在內(nèi)存中的占用量:內(nèi)存占用量=寬*高*像素字節(jié)數(shù),其中像素字節(jié)數(shù)因機型而異。

例如一張64*64的圖片在7210上的內(nèi)存占用量=64*64*1.5=6144(字節(jié))=6k、在s60上的內(nèi)存占用量=64*64*2=8192 (字節(jié))=8k。像素字節(jié)數(shù)因機型而異,例如 7210是4096色機型,也就是說用12位來表示一個像素,所以乘上1.5,而s60是65536色的機型,用16位來表示一個像素,所以乘上2。

b:xcode中使用instruments 查看圖片內(nèi)存的問題

如果使用的是模擬器那么默認是小屏幕的,所以最大圖片是1024 *1024 * 4 = 4 m (1024 是圖片的寬高, 4表示的是圖片的存儲類型為4字節(jié)的。也就是 rgba8888)

如果你加載了圖片那么就是使用了4m的內(nèi)存。如果你需要渲染那么還需要4m的內(nèi)存。

加載一般都是 **load (nsstring *)filename ,

渲染一般都是 node addchild (node)

2: 引用計數(shù)問題

引用計數(shù)增加的情況 : a: alloc 對象會使得對象引用數(shù) +1

b:調(diào)用retain (具體細說一些實例如下)

->比如你是cocos2d用戶的會看到 addchild 會使子節(jié)點的引用計數(shù)+1

->ccarray 的addobject 也會使元素的引用計數(shù)+1

總結(jié)一下就是: 凡是添加到結(jié)合中的元素或者子節(jié)點不需要再去retain ,只需要在建立的時候調(diào)用release

減少的情況 : 調(diào)用release 使引用計數(shù) -1(具體細說一些實例如下)

-> 集合調(diào)用remove/removechildbytag 等等變形的

-> 創(chuàng)建的時候調(diào)用autorelease 。注意:如果你的對象是局部對象,而且創(chuàng)建的時候使用的是autorelease,

那么在離開方法的時候如果你沒有retain 那么這個對象將被dealloc(引用計數(shù)-1了)

官網(wǎng)的介紹:

you own any object you create by allocating memory for it or copying it.

related methods:alloc,allocwithzone:,copy,copywithzone:,mutablecopy,mutablecopywithzone:

if you are not the creator of an object, but want to ensure it stays in memory for you to use, you can express an ownership interest in it.

related method:retain

if you own an object, either by creating it or expressing an ownership interest, you are responsible for releasing it when you no longer need it.

related methods:release,autorelease

conversely, if you are not the creator of an object and have not expressed an ownership interest, you mustnotrelease it.

3 :參考文檔

一,ios與圖片內(nèi)存

在ios上,圖片會被自動縮放到2的n次方大小。比如一張1024*1025的圖片,占用的內(nèi)存與一張1024*2048的圖片是一致的。圖片占用內(nèi)存大小的計算的公式是;長*寬*4。這樣一張512*512占用的內(nèi)存就是 512*512*4 = 1m。其他尺寸以此類推。(ps:ios上支持的最大尺寸為2048*2048)。

,cocos2d-x的圖片緩存

cocos2d-x 在構(gòu)造一個精靈的時候會使用spritewithfile或者spritewithspriteframename等無論用哪種方式,cocos2d-x都會將這張圖片加載到緩存中。如果是第一次加載這個圖片,那就會先將這張圖片加載到緩存,然后從緩存讀取。如果緩存中已經(jīng)存在,則直接從緩存中提取,免除了加載過程。

圖片的緩存主要由以下兩個類來處理:ccspriteframecache, cctexturecache

ccspriteframecache加載的是一張拼接過的大圖,每一個小圖只是大圖中的一個區(qū)域,這些區(qū)域信息都在plist文件中保存。用的時候只需要根據(jù)小圖的名稱就可以加載到這個區(qū)域。

cctexturecache 是普通的圖片緩存,我們所有直接加載的圖片都會默認放到這個緩存中,以提高調(diào)用效率。

因此,每次加載一張圖片,或者通過plist加載一張拼接圖時,都會將整張圖片加載到內(nèi)存中。如果不去釋放,那就會一直占用著。

三,渲染內(nèi)存。

不要以為,計算內(nèi)存時,只計算加載到緩存中的內(nèi)存就可以了。以一張1024*1024的圖片為例。

ccsprite *psprite = ccsprite::spritewithfile(a.png);

調(diào)用上邊這行代碼以后,可以在leaks工具中看到,增加了大約4m的內(nèi)存。然后接著調(diào)用

addchild(psprite);

這時,內(nèi)存又增加了4m。也就是,一張圖片,如果需要渲染的話,那它所占用的內(nèi)存將要x2。

再看看通過plist加載的圖片,比如這張大圖尺寸為2048*2048。想要加載其中的一張32*32的小圖片

ccspriteframecache::sharedspriteframecache()->addspriteframeswithfile(b.plist);

此時內(nèi)存增加16m (汗)

ccsprite *pspriteframe = ccsprite::spritewithspriteframename(b1.png);

b.png 大小為32*32,想著也就是增加一點點內(nèi)存,可實際情況是增加16m內(nèi)存。也就是只要渲染了其中的一部分,那么整張圖片都要一起被加載。

但是情況不是那么的糟糕,這些已經(jīng)渲染的圖片,如果再次加載的話,內(nèi)存是不會再繼續(xù)升高的,比如又增加了100個b.plist的另一個區(qū)域,圖片內(nèi)存還是共增加16+16 = 32m,而不會繼續(xù)上升。

四,緩存釋放

如果游戲有很多場景,在切換場景的時候可以把前一個場景的內(nèi)存全部釋放,防止總內(nèi)存過高.

cctexturecache::sharedtexturecache()->removealltextures();釋放到目前為止所有加載的圖片

cctexturecache::sharedtexturecache()->removeunusedtextures();將引用計數(shù)為1的圖片釋放掉cctexturecache::sharedtexturecache()->removetexture();單獨釋放某個圖片

ccspriteframecache與 cctexturecache 釋放的方法差不多。

值得注意的是釋放的時機,一般在切換場景的時候釋放資源,如果從a場景切換到b場景,調(diào)用的函數(shù)順序為b::init()---->a::exit()---->b::onenter()可如果使用了切換效果,比如ctransitionjumpzoom::transitionwithduration這樣的函數(shù),則函數(shù)的調(diào)用順序變?yōu)閎::init()---->b::onenter()---->a::exit()而且第二種方式會有一瞬間將兩個場景的資源疊加在一起,如果不采取過度,很可能會因為內(nèi)存吃緊而崩潰。

有時強制釋放全部資源時,會使某個正在執(zhí)行的動畫失去引用而彈出異常,可以調(diào)用ccactionmanager::sharedmanager()->removeallactions();來解決。

五,內(nèi)存優(yōu)化

優(yōu)化的心得就是盡量去拼接圖片,使圖片邊長盡可能的保持2的n次方并且裝的很滿。但要注意,有邏輯關(guān)系的圖片盡量打包在一張大圖里,另外一點就是打包的時候要考慮到層的分布。因為為了渲染效率可能會用到ccspritebatchnode;同一個batchnode里的圖片都是位于一個層級的,因此必須根據(jù)各個圖片的層級關(guān)系,打包到不同的plist里。有時內(nèi)存和效率不可以兼得,只能盡量平衡了。

六,其他

最后附一個各代ios設(shè)備的內(nèi)存限制情況

設(shè)備 建議內(nèi)存 最大內(nèi)存

ipad2/iphone4s/iphone4 170-180mb 512mb

ipad/ipod touch3,4/iphone3gs 40-80mb 256mb

ipod touch1,2/iphone3g/iphone1 25mb 128mb

上述建議內(nèi)存只是一些人自己測試的結(jié)果,可用的ram不大于最大內(nèi)存的一半,如果程序超過最大內(nèi)存的一半,則可能會掛掉。

另外在leaks里查看模擬器中和真機總的內(nèi)存,會有較大出入。在模擬器中的結(jié)果與實際更接近一些。

七, 泄漏的情況

我所碰到的主要內(nèi)存泄露的方式:

1、最常見的就是,申請了引用,然后最后忘記釋放。具體么就是,使用oc的 alloc, retain, copy, new, c的malloc, realloc, c++的new等,然后沒有對應的release, free, delete。這是單向泄露。

2、retain cycle,對于oc這種使用計數(shù)的方式,可能會存在retain cycle。兩個條件,一、就是a中retain了b,b又retain了a,各自給對方計數(shù)增加,這個環(huán)可以變?yōu)楹芏鄬樱褪莂->b, b->c, c->d, .... z->a,當然假如中間層越多,檢測難度就越大。二、計數(shù)減少的操作是在dealloc中,而dealloc被調(diào)用則需要計數(shù)為0。 這兩個條件相加,導致計數(shù)鎖定,內(nèi)存泄露。

實戰(zhàn)演練

如何查找內(nèi)存泄漏 ?

一:對工具的使用來查找

1、首先使用分析編譯,analyze build,查看歸類當中的memory警告。

這個一般能發(fā)現(xiàn)局部變量中忘記release,或者被中途打斷release的。

2、然后就是直接使用instruments中的leak監(jiān)測。

申請了內(nèi)存,然后已經(jīng)沒有指向這塊內(nèi)存的指針存在,可以認為是leak了。這個檢測一般是檢測這個狀態(tài)。

3、通過instruments中allocation的mark heap。

進行不斷的重復操作,在每次場景結(jié)束后,標記內(nèi)存。假如操作場景沒有泄露,內(nèi)存增加應該是0。這個檢測是檢測標記點之間有哪些對象增加。另外,需要多mark幾次才會準確,不要mark兩次看到有內(nèi)存增加就去找問題。

instruments中都是可以看到其中存在什么對象,調(diào)用歷史,調(diào)用堆棧。這時候大致確定在那個類當中的那個對象泄露了。

二 ,重載法。

雖然知道了哪個類泄露了,但是有時候并不知道具體是那邊的計數(shù)出現(xiàn)問題。我自己的方法是,假如是自己編寫的類,那就重載retain和release方法,然后加斷點。以此來監(jiān)測是什么地方retain了這個對象,卻沒有對應釋放。

如何修改內(nèi)存泄漏呢 ?

1、缺啥補啥。缺release的,就補release,缺free的就加個free。

2、合理使用autorelease。對于返回給上層使用的;或者alloc對象到release中間有return等打斷操作的。建議使用autorelease。

3、合理使用assign。retain cycle,本質(zhì)就是多余的雙向retain。打個比方就是應該確定哪個對象是根,哪一個是枝葉,枝葉不用去管理根,只需要知道根在那邊就可以了。所以把那些純粹是定位用的變量,屬性都改成assign方式,例如delegate。

ps:

假如對于instruments的使用不是很清楚,可以看這個視頻

游戲中我遇到的一個非常難查的泄漏這里貢獻出來 :

對于cocos2d的用戶如果使用了ccmenu ,而且也重寫了ccscene中的onexsit 函數(shù)來檢測離開場景的時候的一些變化。但是忘了去調(diào)用super onexsit

這時候ccmenu自己注冊了一個事件delegate 就無法釋放導致ccmenu一直無法釋放。當加載到了其他場景的時候事件總會不對。就是因為這個導致的

解決辦法自然是調(diào)用super onexsit 。因為在這里他釋放了delegate

更多信息請查看IT技術(shù)專欄

更多信息請查看技術(shù)文章
易賢網(wǎng)手機網(wǎng)站地址:ios 內(nèi)存優(yōu)化和調(diào)試技巧
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權(quán)所有:易賢網(wǎng)

亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍
在线亚洲国产精品网站| 香蕉成人久久| 久久久夜夜夜| 欧美激情综合| 亚洲视频久久| 亚洲欧美日韩精品在线| 欧美日韩亚洲一区| 影音先锋在线一区| 午夜亚洲精品| 影音先锋亚洲一区| 亚洲一区高清| 国产一区视频观看| 亚洲在线免费| 在线播放豆国产99亚洲| 裸体素人女欧美日韩| 在线观看日韩av电影| 久久本道综合色狠狠五月| 欧美视频网站| 亚洲欧美精品在线观看| 亚洲高清在线观看一区| 欧美91福利在线观看| 国产一级久久| 日韩视频在线播放| 国产精品v欧美精品v日韩| 亚洲欧美日韩国产综合精品二区| 精品1区2区3区4区| 欧美a级在线| 国产精品日本欧美一区二区三区| 激情视频一区二区| 国产精品magnet| 欧美黄色免费| 久久国产精品高清| 亚洲欧美日韩综合一区| 国产偷国产偷亚洲高清97cao| 一区二区视频欧美| 亚洲性人人天天夜夜摸| 国产精品大片| 狠狠久久婷婷| 精品99视频| 尤物网精品视频| 伊人成人网在线看| 影院欧美亚洲| 日韩亚洲国产精品| 亚洲最新在线| 欧美亚洲自偷自偷| 久久午夜电影| 国产精品theporn| 黄色成人在线网站| 国内精品美女在线观看| 韩日欧美一区| 99视频国产精品免费观看| av不卡在线看| 最新亚洲视频| 国产偷自视频区视频一区二区| 一区二区国产在线观看| 国产精品一区毛片| 欧美一区免费| 欧美系列一区| 国产欧美丝祙| 欧美成人一区二区在线| 国产一区二区中文| aⅴ色国产欧美| 久久精品麻豆| 激情一区二区三区| 亚洲视频www| 欧美在线视频一区二区三区| 国产一区二区三区四区老人| 亚洲精品乱码久久久久久蜜桃麻豆| 日韩亚洲国产欧美| 久久久久久久久久久久久久一区| 欧美精品成人| 99在线精品视频在线观看| 另类国产ts人妖高潮视频| 欧美久久成人| 国产精品夜夜夜一区二区三区尤| 久久久精品午夜少妇| 影音先锋中文字幕一区| 免费亚洲婷婷| 亚洲高清av| 欧美一区二区在线| 国产一区91| 一区福利视频| 女主播福利一区| 国产精品亚洲一区| 亚洲国产日韩美| 欧美精品三区| 亚洲一区二三| 日韩视频在线一区二区三区| 国产精品av一区二区| 久久国产88| 国产欧美综合一区二区三区| 国模一区二区三区| 欧美一区二区三区久久精品| 99视频在线精品国自产拍免费观看| 午夜精品久久99蜜桃的功能介绍| 国产日韩欧美综合精品| 激情视频一区| 国产精品a久久久久| 久久都是精品| 亚洲一区二区在| 日韩香蕉视频| 亚洲三级影院| 亚洲精品裸体| 亚洲人成免费| 亚洲精品国产日韩| 亚洲国产日本| 亚洲三级电影在线观看| 亚洲国产精品一区制服丝袜 | 美女尤物久久精品| 中文高清一区| 国产欧美日本| 亚洲一区二区网站| 性8sex亚洲区入口| 亚洲一卡久久| 久久精品中文字幕一区二区三区| 国产精品尤物| 午夜在线观看免费一区| 欧美专区在线| 欧美久久99| 国内激情久久| 一区在线视频观看| 亚洲伦理一区| 一区二区三区四区五区视频 | 国产精品日韩欧美一区二区三区| 亚洲午夜久久久久久尤物| 欧美日韩日本网| 亚洲天堂成人| 亚洲激情不卡| 新狼窝色av性久久久久久| 免费精品视频| 欧美日韩一区在线观看视频| 国产伊人精品| 夜久久久久久| 噜噜噜91成人网| 欧美日韩调教| 在线观看欧美一区| 国产区二精品视| 久久亚洲免费| 精品动漫av| 国产精品乱码| 欧美另类高清视频在线| 亚洲人成人一区二区三区| 国产精品美女久久久浪潮软件| 免费在线亚洲| 国产尤物精品| 亚洲女同同性videoxma| 欧美涩涩网站| 亚洲一区二区网站| 国产一在线精品一区在线观看| 亚洲每日更新| 欧美人成网站| 亚洲一区二区三区在线观看视频| 欧美福利影院| 国产精品三上| 亚洲国产精品一区制服丝袜| 久久精品一区二区国产| 亚洲三级网站| 欧美激情aⅴ一区二区三区| 亚洲国产一区二区三区高清| 欧美亚洲一区| 一本色道88久久加勒比精品| 欧美精品日本| 久久在线精品| 亚洲欧美日本国产专区一区| 激情久久婷婷| 久久综合亚州| 毛片一区二区| 在线亚洲观看| 99在线观看免费视频精品观看| 女同性一区二区三区人了人一| 一本一本a久久| 亚洲一级高清| 欧美日韩国内| 欧美片第1页综合| 久久大逼视频| 久久av二区| 欧美亚洲一区| 亚洲综合视频一区| 国产一区白浆| 国产情侣一区| 国产欧美69| 一道本一区二区| 亚洲国产精品一区| 亚洲高清不卡一区| 亚洲黄色免费| 日韩视频在线播放 | 欧美午夜国产| 欧美人成在线| 午夜日韩av| 欧美日韩在线观看一区二区三区| 久久综合一区| 欧美极品一区二区三区| 欧美大片专区| 国产精品国色综合久久| 欧美日韩在线精品一区二区三区| 午夜亚洲福利| 伊人激情综合| 亚洲色图自拍| 午夜一级久久| 亚洲欧美伊人| 在线 亚洲欧美在线综合一区| 一区二区视频在线观看| 宅男噜噜噜66一区二区| 免费中文字幕日韩欧美| 欧美精品二区| 亚洲精品一级| 久久国产欧美精品| 欧美午夜视频在线| 日韩一级欧洲| 亚洲欧美春色| 欧美日韩一区二区三区在线视频| 狠狠色噜噜狠狠色综合久| 亚洲日本视频| 狂野欧美一区| 亚洲久久在线| 欧美在线不卡| 一区二区三区视频在线播放| 免费在线欧美黄色| 亚洲视频久久| 鲁大师影院一区二区三区| 国产精品v欧美精品v日韩| 中国成人在线视频| 午夜久久资源| 国产一区二区三区久久久久久久久| 久久精品欧洲| 亚洲精品女人| 午夜激情一区| 亚洲欧美日韩国产综合精品二区 | 蜜桃久久精品乱码一区二区| 你懂的国产精品| 日韩午夜黄色| 欧美视频四区| 久久精品国产综合精品| 亚洲欧洲综合| 欧美色图首页| 久久久久久国产精品一区| 日韩香蕉视频| 伊人成人网在线看| 欧美日韩国产精品一区二区亚洲| 一区二区三区av| 亚洲小说欧美另类社区| 久久天堂精品| 亚洲欧美高清| 国产日韩欧美二区| 亚洲国产一区在线| 精品69视频一区二区三区Q| 久久伊人亚洲| 蜜桃av综合| 免费在线亚洲| 亚洲在线免费| 亚洲一区二区精品在线| 亚洲国产日韩综合一区| 好看的av在线不卡观看| 欧美在线91| 欧美一区综合| 午夜精品久久| 午夜视频久久久| 欧美日韩福利| 欧美有码视频| 午夜国产精品视频| 欧美二区不卡| 欧美在线日韩| 久久精品成人一区二区三区蜜臀| 国产精品一区二区三区观看| 日韩一级免费| 国产精品美女黄网| 免费视频一区二区三区在线观看| 一区二区精品国产| 国产日韩精品一区观看| 一区二区三区久久网| 国产精品日本欧美一区二区三区| 在线综合亚洲| 亚洲一区二区三区免费在线观看| 国产九区一区在线| 亚洲一区二区三区免费观看| 免费亚洲一区二区| 欧美一区二区三区四区在线观看地址| 久久精品官网| 欧美日韩在线播放一区二区| 欧美日韩国内| 红桃视频亚洲| 国产视频一区三区| 久久久久天天天天| 国产在线欧美日韩| 亚洲日韩视频| 免费在线成人| 亚洲视频精品| 9色国产精品| 欧美高清视频一区| 亚洲精品看片| 久久另类ts人妖一区二区| 欧美午夜不卡| 一区二区黄色| 久久婷婷人人澡人人喊人人爽| 久久亚洲二区| 亚洲欧洲精品一区二区| 久久电影一区| 亚洲国内欧美| 久久久精品性| 最新国产乱人伦偷精品免费网站| 国产伦精品一区二区三区视频孕妇| 久久国产欧美| 亚洲美女黄色| 欧美国产91| 国产亚洲一区在线| 国产精品mm| 国产日韩欧美精品| 国产一区免费视频| 美女视频一区免费观看| 黑人一区二区三区四区五区| 美女精品在线观看| 日韩亚洲精品在线| 欧美日韩伊人| 久久亚洲美女| 国产农村妇女精品一区二区| 亚洲午夜电影| 欧美激情亚洲| 久久午夜影视| 美女爽到呻吟久久久久| 一本色道婷婷久久欧美| 国产自产在线视频一区| 亚洲欧美国产不卡| 国产欧美亚洲一区| 亚洲黄色成人久久久| 国产精品xvideos88| 久久国产毛片| 免费毛片一区二区三区久久久| 亚洲欧洲日韩综合二区| 韩日精品在线| 国产精品国产一区二区| 欧美国产三区| 欧美精品黄色| 欧美日韩精品免费观看| 欧美激情综合色综合啪啪| 欧美一区高清| 久久综合一区| 久久精品中文| 蜜桃精品久久久久久久免费影院| 99精品热6080yy久久| 极品日韩久久| 亚洲国产精品视频一区| 亚洲视频日本| 国内精品久久国产| 激情久久久久| 亚洲第一黄网| 9色精品在线| 国产精品久久久一区二区三区| 中国女人久久久| 一本色道久久综合| 国产一区二区三区久久久久久久久| 亚洲一级二级| 精品96久久久久久中文字幕无| 欧美日韩另类丝袜其他| 欧美日韩一区二区三区在线观看免| 欧美成人国产| 在线观看成人一级片| 91久久午夜| 国产精品一区二区欧美| 亚洲在线网站| 欧美大片专区| 亚洲精品黄色| 蘑菇福利视频一区播放| 欧美日韩国产色综合一二三四| 欧美日韩在线精品| 永久域名在线精品| 亚洲女同在线| 国产一区清纯| 国产精品久久国产愉拍| 久久香蕉精品| 亚洲国产精品一区| 久久精品人人| 亚洲精品看片| 欧美激情四色| 国产精品免费区二区三区观看| 欧美1级日本1级| 99在线热播精品免费99热| 久久精品在线| 日韩午夜视频在线观看| 久久婷婷亚洲| 日韩午夜在线| 欧美日韩国产高清视频| 国产精品美女久久久浪潮软件| 欧美日产一区二区三区在线观看| 亚洲开发第一视频在线播放| 久久一二三区| 国产伦精品一区二区三区视频孕妇 | 亚洲欧美卡通另类91av| 欧美成人国产| 亚洲三级影院| 亚洲欧美一区在线| 国产精品毛片一区二区三区| 欧美喷水视频| 欧美亚洲一区| 一区二区三区|亚洲午夜| 欧美一区二视频在线免费观看| 亚洲激情偷拍| 你懂的视频一区二区| 国产精品美女久久久浪潮软件| 狠狠色狠狠色综合日日tαg| 久久久久久自在自线|