Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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 如何释放实例变量,然后重用它们_Iphone_Objective C_Ios_Macos - Fatal编程技术网

Iphone 如何释放实例变量,然后重用它们

Iphone 如何释放实例变量,然后重用它们,iphone,objective-c,ios,macos,Iphone,Objective C,Ios,Macos,我的应用程序中有一个对象被声明为实例变量 URLRequest * myRequest 当我要使用这个I类时: myRequest = [[URLRequest alloc] init]; 然后,当我完成时,我: [myRequest release];//or dealloc does the same 以下是更多的代码: 在这里要过去太多了 然而,当我再次使用这个类时,它会通过alloc和init,但是我的应用程序崩溃了 未分配要释放的指针 我不明白这一点,因为我再次alloc和ini

我的应用程序中有一个对象被声明为实例变量

URLRequest * myRequest
当我要使用这个I类时:

myRequest = [[URLRequest alloc] init];
然后,当我完成时,我:

[myRequest release];//or dealloc does the same
以下是更多的代码: 在这里要过去太多了

然而,当我再次使用这个类时,它会通过alloc和init,但是我的应用程序崩溃了

未分配要释放的指针

我不明白这一点,因为我再次alloc和init。如果我不发布,我的应用程序就会出现内存泄漏。谢谢,也许是你的方法

- (void)urlComplete:(NSNotification *)notification
被调用两次,将urlRequest设置为bill,然后在开始时测试它是否为nil

- (void)urlComplete:(NSNotification *)notification

方法

这些方法是什么?让我们看看要复制的最小代码。在获得最小代码时,您可能会看到您自己的问题。我必须对您的评论进行评论。除非将dealloc方法子类化并调用[super dealloc],否则永远不会调用dealloc。从未。曾经不,这和释放不同,释放会减少对象的重新计数,而dealloc会在重新计数达到0时(自动)销毁它。关于你的问题,请告诉我们更多,你在哪里分配和释放这个?@Luke:设置一个指向
nil
的指针意味着你不能再给这个对象发送消息;这意味着你不能释放它,你有漏洞。有时,在释放后将指针设置为
nil
,以确保您不会意外地向释放的对象发送消息。@Mike007:我怀疑很多人会去GitHub阅读所有代码。请在问题中张贴相关部分。只需编辑问题,复制并粘贴相关代码。我打了两次电话,这就是问题所在。我按一下按钮发出请求,我的呼叫被实例化,请求被发出。在那之后,这个类就被释放了。然后我再次点击一个按钮再次发出请求,它错误地说我的类“未分配被释放的指针”。我不明白,因为您可以在我的getExtIP中看到I:urlRequest=[[CMURLRequest alloc]init];再做一次。但下一次我调用urlRquest时,它崩溃了。这是你的问题,你试图释放urlRequest两次,当你释放它时,将它设置为nil,然后你可以使用它来测试该方法是否需要再次执行,或者让向nil发送消息是一个不可操作的事实。谢谢Nathan,这是可行的。现在一切正常,没有内存泄漏。