2011-10-21 51 views
0

加載圖像並記錄其大小的小程序。它是用ARC支持,llvm 3.0編譯的。我在iPod 4.2上運行它,並得到一些有趣的數字...該程序以「發佈」模式編譯爲「-Os」(xcode中「發佈」的默認優化)。整個事情不會發生在模擬器中。它看起來像@autoreleasepool結合循環腐敗堆棧...注意,我必須用這個簡單的例子來隔離這個帖子的問題。使用@autoreleasepool(ARC,使用llvm 3.0編譯,最快,最小[-Os]編譯)堆棧損壞

---------> 

int main(int argc, char *argv[]) 
{   
    @autoreleasepool 
    { 
     return UIApplicationMain(argc, argv, nil, 
           @"AppDelegate"); 
    }  
} 

@interface AppDelegate : UIWindow <UIApplicationDelegate> 
@end 

@implementation AppDelegate 

-(void)loadImageAndLogValues 
{ 
     // image from bundle 256x26 
    UIImage *image = [UIImage imageNamed:@"Image.png"]; 

    for (int i = 0; i < 1; i++) 
    { 
     NSLog(@"size=%@", NSStringFromCGSize(image.size)); 
     NSLog(@"w=%f", image.size.width); 
     NSLog(@"h=%f", image.size.height); 
     NSLog(@"------------------------"); 
    } 
} 

-(BOOL)application:(UIApplication*)application 
didFinishLaunchingWithOptions:(NSDictionary*)launchOptions 
{ 
    self.frame = [UIScreen mainScreen].bounds; 
    self.backgroundColor = [UIColor blueColor]; 
    [self makeKeyAndVisible]; 

    [self loadImageAndLogValues]; 

    UIGestureRecognizer *tap = [[UITapGestureRecognizer alloc] 
     initWithTarget:self 
       action:@selector(loadImageAndLogValues)]; 
    [self addGestureRecognizer:tap]; 

    return YES; 
} 

@end 

<------------------ 

這是我點擊一下屏幕後的輸出(!攻後登錄時,「H」是錯誤的圖像的高度是26 ...):

2011-10-21 01:54:48.677 Tmp[2522:307] size={256, 26} 
2011-10-21 01:54:48.696 Tmp[2522:307] w=256.000000 
2011-10-21 01:54:48.705 Tmp[2522:307] h=26.000000 
2011-10-21 01:54:48.715 Tmp[2522:307] ------------------------ 
2011-10-21 01:54:50.576 Tmp[2522:307] size={256, 26} 
2011-10-21 01:54:50.582 Tmp[2522:307] w=256.000000 
2011-10-21 01:54:50.589 Tmp[2522:307] h=256.000000 
2011-10-21 01:54:50.595 Tmp[2522:307] ------------------------ 

現在,我從main()中刪除@autoreleasepool:

int main(int argc, char *argv[]) 
{   
     //@autoreleasepool 
     //{ 
     return UIApplicationMain(argc, argv, nil, 
           @"AppDelegate"); 
     //}  
} 

運行該程序並點擊。還在爲 「H」 錯誤值,但調用直接從 「loadImageAndLogValues」 當 「的application:didFinishLaunchingWithOptions:」 ......

2011-10-21 02:02:08.222 Tmp[2544:307] size={256, 26} 
2011-10-21 02:02:08.240 Tmp[2544:307] w=256.000000 
2011-10-21 02:02:08.250 Tmp[2544:307] h=256.000000 
2011-10-21 02:02:08.259 Tmp[2544:307] ------------------------ 
2011-10-21 02:04:59.097 Tmp[2544:307] size={256, 26} 
2011-10-21 02:04:59.103 Tmp[2544:307] w=256.000000 
2011-10-21 02:04:59.109 Tmp[2544:307] h=26.000000 
2011-10-21 02:04:59.115 Tmp[2544:307] ------------------------ 

... ARC + LLVM 3.0 + -Os + @autoreleasepool +這麼( ;;)+ image.size.width/height不適合我:)請幫忙!謝謝!

+0

你有沒有向蘋果bug報告系統報告缺陷? –

+0

不,但我張貼在蘋果開發者論壇:https://devforums.apple.com/message/564415#564415到目前爲止沒有答案。 – debleek63

+0

如果沒有人知道您的bug,您如何預期它被修復?簡單地詢問一些隨機論壇不會有幫助,你必須填寫問題報告。 –

回答

1

後(順便說一句)閱讀LLVM vs. GCC for iOS development設法解決這個問題...... ARMv6恰恰是我的iPod,它給了麻煩。 「修復」是僅對ARMv6配置禁用拇指支持。偉大的,但很奇怪...

enter image description here

+0

是的,這似乎有同樣的原因和相同的解決方案,因爲這裏描述的編譯器錯誤:http://stackoverflow.com/questions/8391307/coordinates-all-wrong-on -iPhone-3G-IT-會待你的編譯器 – Clafou