2011-10-09 48 views
1

我有一些嵌套的if語句執行特定的數據檢查。如果結果是我正在尋找的,那麼我將這些數據存儲在一個數組中,並立即調用return;以突破該函數。「return」並逐步完成Xcode中的函數

當通過它在調試器步進,我已經注意到了,而不是爆發的功能,立即一個return調用,而不是移動應用到一個不同的return調用,然後跳出功能。我的問題是雙重的:

1)爲什麼會發生這種情況?
2)這是我應該擔心的事嗎?到目前爲止,它並沒有帶來任何問題。

下面是下面的確切代碼。這種情況發生在代碼最終返回(看起來接近尾聲)的100%時間內。我已在該函數的最後一個之後的return代碼中發表了註釋。

if ([self comparePx:[self getAvgPxClrForRow:rowEdge andCol:colEdge forDirection:0] toBins:bgBins] == nil) { 

      colEdge--; 
      while (colEdge >= includedAreaOriginCol) { 
       if ([self comparePx:[self getAvgPxClrForRow:rowEdge andCol:colEdge forDirection:0] toBins:bgBins] != nil) { 
        colEdge++; 
        prevEdgePt = CGPointMake(colEdge, rowEdge); 
        [edgePtsLeft addObject:[NSValue valueWithCGPoint:prevEdgePt]]; 

        //FIRST RETURN STEPS BACK TO THIS RETURN 
        return; 
       } else { 
        if ([self comparePx:[self getAvgPxClrForRow:rowEdge-1 andCol:colEdge forDirection:0] toBins:bgBins] != nil) { 
         prevEdgePt = CGPointMake(colEdge, rowEdge); 
         [edgePtsLeft addObject:[NSValue valueWithCGPoint:prevEdgePt]]; 
         return; 
        } else { 
         if (rowEdge - prevEdgePt.y == 0) return; 

         isFindingLeftEdge = NO; 

         //FIRST RETURN 
         return; 
        } 
       } 
      } 

     } 

回答

0

這很可能是編譯器優化的結果。

在返回調用者之前需要在函數上運行一些代碼(可能會執行一些清理或堆棧操作,可能會解除分配)。
編譯器可能選擇不重複該代碼,因此「return」語句最終運行相同的程序集塊,調試器沒有足夠的信息來理解該語句。

沒什麼好擔心的。

+0

感謝您的回答。 – maxedison

相關問題