我不清楚Objective C如何处理局部变量和成员变量,因为我是新手。考虑我在这样的函数中创建一个视图......
fun () {
new_class *var = [new_class alloc] init]
// some code to push the view here...
}
这里一切正常,现在我的问题是 var 是一个局部变量,当函数范围结束时,它会死吗?如果当我在其中执行某些操作时视图如何正常工作...
谢谢...
我不清楚Objective C如何处理局部变量和成员变量,因为我是新手。考虑我在这样的函数中创建一个视图......
fun () {
new_class *var = [new_class alloc] init]
// some code to push the view here...
}
这里一切正常,现在我的问题是 var 是一个局部变量,当函数范围结束时,它会死吗?如果当我在其中执行某些操作时视图如何正常工作...
谢谢...
指针 将var
超出范围并被“删除”,但它指向的对象在稍后释放(手动或通过 ARC,如果启用)之前不会被删除。
如果没有其他对象指向它,则 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
,这就是一切正常的原因。
不,它不会死。该变量的作用域是函数的本地变量,因此编译器不会让您访问var
fun() 方法之外的内容,但是您会出现内存泄漏(假设没有 ARC)
您已经分配了内存,但还没有释放它。
您可以手动释放它,或者使用 AutoReleasePool 并在池耗尽时释放它。
在较新版本的 IOS 中,Apple 增加了对自动引用计数 (ARC) 的支持,编译器将为[obj release];
您添加语句。
从评论:
如果您有一个放置在堆栈上的对象,并且您稍后想要释放它。当您弹出 UIView 时,将返回指向该视图的指针。如果将其分配给某个局部变量,则可以在准备好时释放它:
UIView * myView = [someViewHandler popView];
[myView release]; myView = nil;