關於函式返回值作用域的一些思考

2021-06-26 15:01:35 字數 797 閱讀 8318

函式中的變數的作用域只能是在這個函式內,在arc環境內,例如,

- (uiview * )method
view的作用域只能在這個函式內,所以按理說應該在函式結束後就會將view的記憶體計數減一,但是實際上並不是這樣,如下測試**:

- (void)viewdidload 

- (uiview * )method

輸出的view的寬度是100,而不是0,假如函式結束時view的記憶體計數器立馬減1,那麼當執行完view = nil;後view的記憶體計數應該只有0了,無法輸出view的寬度是100,這說明當結束這個函式時,view的計數並沒有立刻就減1,而應該是把它放入了自動釋放池,也就是非arc中的 return [view autorelease];這個只適用於函式內被返回的變數,對於不被返回的變數,因為它的作用域只在這個函式內,所以在arc環境下,當函式結束時,這個變數就回release一次,如下測試**:

- (void)viewdidload 

}- (uiview * )method:(nsobject * __strong)obj

在method函式內有乙個區域性變數obj ,當函式結束時就回把它release一次,所以當viewdidload中的obj設定為nil的時候就被立即釋放了(nslog被執行).

總結:在函式作用域結束時需要處理物件的引用計數,假如是不需要返回的物件,可以直接release,而假如是需要返回的物件,處理方法是autorelease,目的是稍微延遲它的釋放時間用來傳給外面的物件,而不是函式結束時就釋放。

關於函式返回值的一些理解

前面看了幾篇關於函式返回值的帖子,覺得學多了高階程式語言,還是有必要對一些底層的只是需要了解一些 下面我總結了一些,肯定是不全,還望大家給予指正o o 當我們使用乙個被調函式的時候,return的時候分為兩個情況,乙個是返回數值,乙個就是指標 或者引用 當我們返回數值的時候,編譯通過,沒有問題,輸出...

函式的返回值和1作用域

函式的返回值和1作用域 author administrator date 2019 11 1 小結 1.變數查詢順序 legb 2.只有模組,類,及函式才能引入新作用域 3.對於乙個變數,內部作用域先宣告就會覆蓋外部變數。不宣告直接使用,就會使用外部作用域的變數 4.內部作用域要修改外部作用域變數...

Socket一些函式相關的返回值

若無錯誤發生,recv 返回讀入的位元組數。如果連線已中止,返回0。否則的話,返回socket error錯誤,應用程式可通過wsagetlasterror 獲取相應錯誤 如無錯誤發生,listen 返回0。否則的話,返回socket error錯誤,應用程式可通過wsagetlasterror 獲...