为什么这个方法被调用两次?

pre*_*io2 2 c cocoa objective-c

以下代码行在currentPlaybackTime我的singleton MAMusicPlayer类上调用了两次方法:

float trackPosition = MAX(floor([[MAMusicPlayer sharedPlayer] currentPlaybackTime]),0.0f);
[scrubber setValue:trackPosition];
Run Code Online (Sandbox Code Playgroud)

通过反复试验,我设法通过调整代码来解决问题:

float trackPosition  = floor([[MAMusicPlayer sharedPlayer] currentTrackPosition]);
[scrubber setValue:MAX(trackPosition,0.0f)];
Run Code Online (Sandbox Code Playgroud)

但是我仍然不明白为什么第一个例子应该调用该方法两次.由于这可能是相当基础的,我认为最好要求澄清.

Jef*_*mes 7

MAX(a, b)可能是定义为宏((a > b) ? a : b),因此,当术语被取代ab,每个术语被评估两次.

  • 假设这是Cocoa MAX定义稍好一点.#define MAX(A,B)({__ typeof __(A)__ a =(A); __ typeof __(B)__b =(B); __ a <__b?__b:__ a;})你可以强迫它使用更糟糕的一个虽然启用了各种扩展 (3认同)