2016-08-16 82 views
-3

這個函數在Objective-C中返回什麼?函數或方法什麼時候會停止執行?

- (NSInteger)test1 { 
    @try { 
     return 1; 
    } @catch (NSException *exception) { 
     return 2; 
    } @finally { 
     return 3; 
    } 
    return 4; 
} 

而當將一個函數或方法停止執行?(不僅是Objective-C代碼)

------------更新----- ---------

結果是3

如果我評論或刪除返回代碼在最後,會出現什麼功能輸出?

- (NSInteger)test2 { 
    @try { 
     return 1; 
    } @catch (NSException *exception) { 
     return 2; 
    } @finally { 
     //return 3; 
    } 
    return 4; 
} 

結果爲1

我問這個問題是要知道什麼時候會在功能停止執行。

+0

但是,你甚至不會告訴我們它寫了什麼語言(看起來像Objective-C?) – tambre

+0

是的,它是Objective-C。但在java中結果相同。 – Simon

+1

我不明白這個問題。您可以編譯並運行該代碼(使用合適的樣板)並親自查看。 – Avi

回答

1

它,當它到達的代碼路徑的最後一行,所以它的理解代碼路徑中的所有問題停止執行。

一般規則:

  • 代碼在其出現的順序執行。
  • 在函數返回給調用者之前,finally代碼塊中的代碼將運行。
  • 要執行的最後一個返回語句的值將是函數的返回值。

現在,讓我們將這些規則應用於您的示例。

- (NSInteger)test1 { 
    @try { 
     return 1; 
    } @catch (NSException *exception) { 
     return 2; 
    } @finally { 
     return 3; 
    } 
    return 4; 
} 

要執行的第一條語句是return 1;。它在@try塊中實際上是不相關的,因爲它不會引發異常。因爲它是一個返回語句,函數即將返回。但是,有一個@finally塊,以便下一步執行。唯一的語句是return 3;,以便執行並替換由前面的語句設置的函數的返回值。

如果從@finally塊刪除代碼,或完全消除塊,代碼執行的第一條語句後只是簡單地返回,因爲它是一個return聲明。

return語句總是使函數的執行短路,並導致執行任何清理代碼(例如,在ObjC中爲@finally塊,在Swift中爲defer塊)。

+0

謝謝,你說得更清楚。 – Simon

0

我想你的code.I叫你在viewDidLoad方法

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    NSInteger i = [self test]; 
    NSLog(@"The value is - %ld",(long)i); 
} 


- (NSInteger)test { 
@try 
{ 
    return 1; 
    } @catch (NSException *exception) { 
    return 2; 
    } @finally { 
    return 3; 
    } 
    return 4; 
} 

編碼並印刷

The value is - 3 

其實首先它會調用try塊,然後調用finally塊。

@try - 定義的代碼塊是一個異常處理域: 代碼,可以潛在地拋出異常。

@catch() - 定義一個包含用於處理拋出在@try塊中的異常 的代碼的塊。 @catch的參數是本地拋出的異常 對象;這通常是一個NSException對象,但可以是其他類型的對象,例如NSString對象。

@finally - 定義一個相關代碼塊,隨後執行 是否拋出異常。 finally塊包含無論是否拋出異常都必須執行的代碼。

@throw - 引發異常;此指令在 行爲與NSException的raise方法幾乎完全相同。您通常會拋出 NSException對象,但不限於它們。有關@throw的更多信息 ,請參見拋出異常。

Handling Exception

+0

謝謝,但這不是我想要的答案。 – Simon

+0

那你還想要什麼哥哥? – user3182143

+0

兄弟如果你不打電話最後它返回1兄弟 – user3182143