2012-01-01 70 views
3

我有一些代碼在那裏我試圖修改一個的CGRect的屬性,並設置其它的CGRect這個新框架:調試/發佈構建視圖之間的iOS精度差異?

actView   = [[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray ] autorelease]; 
actView.hidesWhenStopped = NO; 
[actView startAnimating]; 
frame   = actView.frame; 
frame.origin.x = mainLabel.frame.origin.x - frame.size.width - TBLCELLPADDING; 
frame.origin.y = mainLabel.frame.origin.y; 
actView.tag  = TBLCELLACTTAG; 
actView.frame = frame; 
[cell.contentView addSubview:actView]; 

這工作正常,在調試版本和發佈版本較新的iPhone。然而,運行在3G iPhone的發佈版本上會產生一些瘋狂的結果,並會混淆視圖。

預期結果(用較新的手機作品):

2012-01-01 14:41:43:449 myapp [691:775] Loading MainLabel: 122.000000 26.000000 
2012-01-01 14:41:43:605 myapp[691:775] Loading Frame: 97.000000 26.000000 
2012-01-01 14:41:43:713 myapp[691:775] Loading ActView: 97.000000 26.000000 

結果爲iPhone 3G運行4.2固件發佈版本(這發生在任何固件):

2012-01-01 14:43:39:516 myapp[706:775] Loading MainLabel: 122.000000 26.000000 
2012-01-01 14:43:39:589 myapp[706:775] Loading Frame: 26.000000 26.000000 
2012-01-01 14:43:39:792 myapp[706:775] Loading ActView: 26.000000 0.000000 

這是擰在我的應用程序中爲這款較舊的iPhone提供全部視圖。
有沒有一種方法我應該專門處理這個代碼方面?或者我應該修改舊版iPhone的版本設置中的某些內容?

+0

聽起來像某種競爭條件。 – CodesInChaos 2012-01-01 22:59:48

+1

在設置'frame.origin.x'的行之前添加某種睡眠呼叫(或spinwait)。如果這樣可以解決問題,那麼您有一個競爭條件,您應該使用適當的同步來解決這個問題。 – CodesInChaos 2012-01-01 23:45:53

回答

3

由於該問題僅存在於基於ARMV6的設備上,並且只有在構建優化代碼時纔有可能發生在對llvm進行錯誤的ARMV6優化中。

以下內容添加到您的構建設置,用戶定義的設置:

GCC_THUMB_SUPPORT = NO 

這是應該的樣子: enter image description here

這樣做是什麼,它完全禁用Thumb指令集爲您的應用程序構建。如果這導致功能正常運行的應用程序,請檢查該應用程序是否仍然在ARMV7設備上運行良好,因爲此設置可能會嚴重影響性能。

儘管這似乎是GCC特定的設置,但LLVM仍然會尊重這一設置,並將我保存在一些需要更新的舊項目中。

+1

這是正確的解決方案,並已在Xcode 4.3測試版中修復。 – 2012-01-02 00:40:20

+0

@JoshuaWeinberg很高興知道蘋果最終解決了這個問題,感謝傳播這個詞。 – Till 2012-01-02 01:05:33

+0

是的,這解決了我的問題。所以這是固定在4.3以上,據說?在較新版本的xcode中的修復會減慢armv7的編譯速度嗎? – 2012-01-02 08:02:00

0

如果應用程序在舊手機上運行,​​您可以隨時指定不同的代碼設置。使用預編譯器標題。

+0

如果這是一個競爭條件,那麼很可能是所有手機都存在這個bug,但只有在老手機上才能看到。在這種情況下隱藏症狀並不是正確的解決方案。 – CodesInChaos 2012-01-01 23:44:05

+0

但是你會有什麼建議?它似乎是唯一的其他選擇將與它一起生活...... – DGund 2012-01-01 23:46:17