Re: [問題] 升級XCode4.2後問題一堆...

看板MacDev作者 (我很可愛)時間13年前 (2011/10/25 20:13), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/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
That's called tight loop. Autorelease in the loop.
10/26 09:56, 1F

10/26 21:26, , 2F
嗯嗯…看來allValues也會產生新的autorelease object
10/26 21:26, 2F
文章代碼(AID): #1EfgW7Nr (MacDev)
討論串 (同標題文章)
文章代碼(AID): #1EfgW7Nr (MacDev)