作者hatasum (我很可爱)
看板MacDev
标题Re: [问题] 升级XCode4.2後问题一堆...
时间Tue Oct 25 20:13:57 2011
※ 引述《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
1F:→ yllan:That's called tight loop. Autorelease in the loop. 10/26 09:56
2F:推 aecho:嗯嗯…看来allValues也会产生新的autorelease object 10/26 21:26