Re: [問題] 升級XCode4.2後問題一堆...
※ 引述《hatasum (我很可愛)》之銘言:
: 我之前是在XCode4的環境下開發
: 最近升級成XCode4.2...結果問題一大堆~"~
: ^^"想請教大家以下幾個問題:
: (1) 如果要讓ios5的機器能run,一定要用XCode4.2所Build出來的App嗎??
: (2) 建置出for ios5的project的App,在"ios4"的機器上使用,會有什麼問題嗎?
: (3) 原本的Project是XCode4開發的,更新成XCode4.2後,記憶體釋放的效果變得很差。
: 我有Google過有關ARC的相關問題,也確實把ARC關掉(因為我都寫了這麼多release、
: retain、autorelease...不想都改掉...)
: 但是...每次用模擬器關掉run的程式,它就會當在NSAutoreleasePool (怪異~~?)
: 網路上說 :
: 新建專案時,ARC=true、AutoReleasePool變成@autoreleasepool
: 但是我不是新建專案...我把ARC關掉那它應該能吃舊的"NSAutoreleasePool"吧?(猜想)
: 想請教大家是否有類似的遭遇、大家怎麼解決這問題的?
@@自問自答~~~這是今天在網路上找到的
(1) 只要是XCode build出來的app都可以在它建置的需求版本以上使用
(2) 如果是XCode4.2建置的app,在Target的Build Settings中的Architectures需加入一
組armv6的設定就可以在iOS 4.3以下的版本支援
(3) 這應該是我寫code的問題(也可能是XCode4.2的NSAutoreleasePool有修改?)
我之後再回去查看記憶體,雖然在leak裡面查看還是沒發現異狀
但是之後轉查看Allocation的所有產生過的記憶體發現NSArray建立很多次!!!
建立的地方我看了之後發現我之前的寫法有問題 :
//for some NSMutableDictionary , is called dictionary
for (int i=0; i<[[dictionary allValues] count]; i++)
{
int wantInt =[[[dictionary allValues] objectAtIndex:i] intValue];
// do something
}
上述是部分流程,而且是遞迴......
雖然說[dictionary allValues]是autoRelease,但是可能是create太多次,造成
NSAutoreleasePool 來不及釋放(或者是遞迴太快...NSAutoreleasePool無法承受了?)
所以我就改成
NSArray* dictionaryAllValues = [dictionary allValues];
for (int i=0; i<[dictionaryAllValues count]; i++)
{
int wantInt =[[dictionaryAllValues objectAtIndex:i] intValue];
// do something
}
效能問題似乎就解決了!!!
我不確定這是不是和XCode升級有關,但是其實也是自我功力不足...^^" 以後還是要小心
分享給大家!!!
當然~~如果有錯請指正!!!^^
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.169.88.36
→
10/26 09:56, , 1F
10/26 09:56, 1F
推
10/26 21:26, , 2F
10/26 21:26, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
MacDev 近期熱門文章
PTT數位生活區 即時熱門文章