1

我不清楚Objective C如何处理局部变量和成员变量,因为我是新手。考虑我在这样的函数中创建一个视图......

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

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

这里一切正常,现在我的问题是 var 是一个局部变量,当函数范围结束时,它会死吗?如果当我在其中执行某些操作时视图如何正常工作...

谢谢...

4

3 回答 3

2

指针var超出范围并被“删除”,但它指向的对象在稍后释放(手动或通过 ARC,如果启用)之前不会被删除。

于 2012-10-22T07:09:55.717 回答
2

如果没有其他对象指向它,则 var 应该是释放的。事情是:

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

例如,如果您的“var”是一个UIView,而您[self.view addSubview:var],现在您有两个对象指向它:*var和您的self.view,这就是一切正常的原因。

于 2012-10-22T07:12:33.257 回答
1

不,它不会死。该变量的作用域是函数的本地变量,因此编译器不会让您访问varfun() 方法之外的内容,但是您会出现内存泄漏(假设没有 ARC)

您已经分配了内存,但还没有释放它。

您可以手动释放它,或者使用 AutoReleasePool 并在池耗尽时释放它。

在较新版本的 IOS 中,Apple 增加了对自动引用计数 (ARC) 的支持,编译器将为[obj release];您添加语句。

从评论:

如果您有一个放置在堆栈上的对象,并且您稍后想要释放它。当您弹出 UIView 时,将返回指向该视图的指针。如果将其分配给某个局部变量,则可以在准备好时释放它:

UIView * myView = [someViewHandler popView]; 
[myView release]; myView = nil;
于 2012-10-22T07:12:21.280 回答