Iphone 局部变量和成员变量在目标C-IOS中的行为
我还不清楚Objective C如何处理局部变量和成员变量,因为我对这一点还不熟悉。 考虑我在这样的函数内创建一个视图…Iphone 局部变量和成员变量在目标C-IOS中的行为,iphone,objective-c,ios,cocoa-touch,Iphone,Objective C,Ios,Cocoa Touch,我还不清楚Objective C如何处理局部变量和成员变量,因为我对这一点还不熟悉。 考虑我在这样的函数内创建一个视图… fun () { new_class *var = [new_class alloc] init] // some code to push the view here... } 这里一切都很好,现在我的问题是var是一个局部变量,当函数作用域结束时,它是否会消亡?如果它死了,当我在视图中执行某些操作时,视图如何正常工作 感谢…指针var将超出范围并被“删除”
fun () {
new_class *var = [new_class alloc] init]
// some code to push the view here...
}
这里一切都很好,现在我的问题是var是一个局部变量,当函数作用域结束时,它是否会消亡?如果它死了,当我在视图中执行某些操作时,视图如何正常工作
感谢…指针
var
将超出范围并被“删除”,但它指向的对象在稍后释放之前不会被删除(手动或通过ARC,如果启用)。指针var
将超出范围并被“删除”,但是它指向的对象在以后释放之前(手动或通过ARC,如果启用)不会被删除。不,它不会消亡。变量的作用域是函数的局部,因此编译器不允许您在fun()方法之外访问var
,但是您会有内存泄漏(假设没有ARC)
您已分配内存,但尚未释放
您可以手动释放它,或者使用AutoReleasePool,并在池排空时释放它
在较新版本的IOS中,苹果增加了对自动引用计数(ARC)的支持,编译器将在其中添加[obj release]代码>语句
从评论中:
如果您有一个放置在堆栈上的对象,并且以后要释放它。弹出UIView时,将返回指向该视图的指针。如果将其分配给某个局部变量,则可以在准备好执行以下操作时释放它:
UIView * myView = [someViewHandler popView];
[myView release]; myView = nil;
不,它不会死的。变量的作用域是函数的局部,因此编译器不允许您在fun()方法之外访问var
,但是您会有内存泄漏(假设没有ARC)
您已分配内存,但尚未释放
您可以手动释放它,或者使用AutoReleasePool,并在池排空时释放它
在较新版本的IOS中,苹果增加了对自动引用计数(ARC)的支持,编译器将在其中添加[obj release]代码>语句
从评论中:
如果您有一个放置在堆栈上的对象,并且以后要释放它。弹出UIView时,将返回指向该视图的指针。如果将其分配给某个局部变量,则可以在准备好执行以下操作时释放它:
UIView * myView = [someViewHandler popView];
[myView release]; myView = nil;
如果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应该被释放。问题是:
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
,这就是为什么一切都没问题的原因。他的最后一句话意味着他让变量以某种方式离开了函数范围(尽管我可能弄错了…)我使用的是ARC,如果它是非ARC,我们如何删除或释放本地变量,因为它只能由该函数访问;var=零
@Alan不,你不明白我的问题,var是该函数的局部变量,如果我弹出该视图,我不需要更多,我必须释放该对象,所以var对我来说是不可访问的,因为它仅限于该函数,在这种情况下,我们如何删除该变量?我如何知道ARC是否启用?他的最后一句话暗示他让变量以某种方式离开函数范围(尽管我可能弄错了…)我正在使用ARC,如果它是非ARC,我们如何删除或释放局部变量,因为它只能由该函数访问。对于手动内存管理,请使用:[风险值释放];var=nil;
@Alan不,你不明白我的问题,var是该函数的局部变量,如果我弹出该视图,我不需要再释放该对象,因此var对我来说是不可访问的,因为它仅限于该函数,在这种情况下,我们如何删除该var?我如何知道ARC是否已启用?如果我通过gh导航控制器,它将增加其引用计数对吗?所以,如果我通过导航控制器推送视图,它将增加其引用计数对吗?