Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 局部变量和成员变量在目标C-IOS中的行为_Iphone_Objective C_Ios_Cocoa Touch - Fatal编程技术网

Iphone 局部变量和成员变量在目标C-IOS中的行为

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将超出范围并被“删除”

我还不清楚Objective C如何处理局部变量和成员变量,因为我对这一点还不熟悉。 考虑我在这样的函数内创建一个视图…

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导航控制器,它将增加其引用计数对吗?所以,如果我通过导航控制器推送视图,它将增加其引用计数对吗?