[英]iPhone - is there any advantage in using animateWithDuration instead of UIView beginAnimations?
[英]Is there any advantage in terms of speed by using MIN MAX instead of checking the range by regular code?
我在Apple創建的示例應用程序上看到此代碼段:
- (AVCaptureWhiteBalanceGains)normalizedGains:(AVCaptureWhiteBalanceGains)gains
{
AVCaptureWhiteBalanceGains g = gains;
g.redGain = MAX( 1.0, g.redGain );
g.greenGain = MAX( 1.0, g.greenGain );
g.blueGain = MAX( 1.0, g.blueGain );
g.redGain = MIN( self.videoDevice.maxWhiteBalanceGain, g.redGain );
g.greenGain = MIN( self.videoDevice.maxWhiteBalanceGain, g.greenGain );
g.blueGain = MIN( self.videoDevice.maxWhiteBalanceGain, g.blueGain );
return g;
}
蘋果正在檢查紅色,綠色和藍色增益值,以防止該值超出有效范圍。
好的,我知道MIN MAX會做什么,但是像他們這樣寫,真的有必要嗎? 這種代碼會使您的大腦疲勞一微秒,因為如果您以前從未看過,一眼就很難理解。
相反,編寫一個函數來檢查它會更容易嗎? 喜歡:
- (CGFloat) checkValue:(CGFloat)v againstMinimum:(CGFloat)min andMaximum:(CGFloat)max {
if (v < min) return min;
if (v > max) return max;
return v;
}
如果他們不希望代碼在函數外部擴展,則可以在函數內部編寫一個靜態塊。
我的問題是:使用一種方法或另一種方法是否可以提高速度?
我的問題是:使用一種方法或另一種方法是否可以提高速度?
MIN
和MAX
是擴展為內聯代碼的宏,而您的checkValue:againstMinimum:andMaximum:
是需要方法分派的方法-因此,前者無疑是更快的方法,但對整個應用程序的好處可能微不足道。
如果您想要清晰度,並且應該但不花太多錢,可以從一個函數開始:
CGFloat checkValue(CGFloat min, CGFloat v, CGFloat max)
{
if (v < min) return min;
if (v > max) return max;
return v;
}
並獲得內聯的好處,添加NS_INLINE
:
NS_INLINE CGFloat checkValue(CGFloat min, CGFloat v, CGFloat max) ...
兩者都具有它們是函數的優點–通常是更好的編譯器錯誤消息,不會因參數的雙重評估而產生奇怪的影響,等等–但是,如果您喜歡宏解決方案,則可以使用:
#define CLAMP(lower, v, upper) MIN(MAX(lower, v), upper)
選擇最清晰的選擇 ,不要對速度太在意-除非后來的分析表明這是一個問題。
高溫超導
MIN
和MAX
是在編譯開始時擴展為大約(a < b)? a : b
宏(a < b)? a : b
(a < b)? a : b
MIN表示(a < b)? a : b
,MAX表示相反。 不考慮條件if
和三元之間的詳細區別?
, 他們都是一樣的。
也就是說,出於所有意圖和目的:
int a = MAX(b,c);
int a = (b > c)? b : c;
if (b > c) a = b; else a = c;
都是一樣的。
一旦習慣了,他們選擇的配方就非常好。 這是將值“限制”在范圍內的想法:“這些值可能以任何方式出現,但是當我們完成操作后,它們將落入某個范圍內(在代碼中可以像MIN和MAX)”。 當我看到這樣的代碼時,因為我只需要考慮鉗位范圍,就可以更好地理解以下數學內容,這讓我感到很自在。
我將方法稱為“ clampedGains”增益,而不是“ normalizedGains”增益。 通過將值除以理論最大值,規范化將值映射到0.0 ... 1.0范圍內。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.