2012-10-22 26 views
1

我還不清楚Objective C如何處理本地和成員變量,因爲我是新手。 考慮我創造這樣的函數內部的視圖...本地和成員變量如何在目標C中的行爲 - IOS

fun() { 
    new_class *var = [new_class alloc] init] 

    // some code to push the view here... 
} 

一切正常這裏,現在我的問題是var是一個局部變量,當函數範圍結束,將它死了沒有?如果死了怎麼視圖正常工作時我做它的一些行動......

感謝...

回答

2

的VAR應該釋放,如果沒有它的其他對象指向它。問題是:

if it dies how the view is working properly when I am doing some action in it 

如果你的「變種」,例如是一個UIView,你[self.view addSubview:var],現在你有兩個對象指向它:*var和你self.view,這就是爲什麼一切正常。

+0

因此,如果我通過導航控制器推動視圖,它會增加其引用計數? – Newbee

+0

是的,它會的。這就是爲什麼一切似乎都可以正常工作...... – Peres

2

指針var將走出去的範圍,是「刪除」,但對象直到它稍後被釋放(手動或通過ARC,如果啓用)纔會被刪除。

1

不,它不會死。這個變量的作用域是本地的,所以編譯器不會讓你在你的fun()方法外部訪問var,但是你會有內存泄漏(假設沒有ARC)

你已經分配了內存,沒有公佈它。

您可以手動釋放它,或者使用AutoReleasePool並在池被排空時釋放它。

在較新版本的IOS中,Apple增加了對自動引用計數(ARC)的支持,其中編譯器將爲您添加[obj release];語句。

從評論:

如果你有一個放置在堆棧上的對象,你以後想將其釋放。當你彈出UIView時,返回一個指向該視圖的指針。如果您分配一些局部變量,你可以釋放它,當您準備:

UIView * myView = [someViewHandler popView]; 
[myView release]; myView = nil; 
+0

他的最後一句話意味着他讓變量以某種方式離開函數範圍(雖然我可能會誤會...) – nneonneo

+0

我正在使用ARC,如果它是非ARC,我們如何刪除或釋放本地var,因爲它只能通過該功能訪問。 – Newbee

+0

對於手動內存管理,使用:'[var release]; var = nil;' – Alan