Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.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 推入iOS后释放_Iphone_Objective C_Ios_Memory Management_Memory Leaks - Fatal编程技术网

Iphone 推入iOS后释放

Iphone 推入iOS后释放,iphone,objective-c,ios,memory-management,memory-leaks,Iphone,Objective C,Ios,Memory Management,Memory Leaks,所以我有下面的代码,在将一个对象推到另一个视图后,我将释放它。当我分析它时,我得到了一个错误——调用方此时不拥有的对象的引用计数的不正确递减。有人知道怎么解决这个问题吗?每次出现不同的内存泄漏时,我都尝试了很多方法 - (void)showCurrentArticle:(id)sender { if(animating) return; //it is already there animating = YES; JsonViewController *

所以我有下面的代码,在将一个对象推到另一个视图后,我将释放它。当我分析它时,我得到了一个错误——调用方此时不拥有的对象的引用计数的不正确递减。有人知道怎么解决这个问题吗?每次出现不同的内存泄漏时,我都尝试了很多方法

- (void)showCurrentArticle:(id)sender {
    if(animating) 
        return; //it is already there
    animating = YES;
    JsonViewController *newsController = [(JsonViewController *)[self.newsNavController.viewControllers objectAtIndex:0]retain];
    newsNavController.title = @"Parliament";
    Item *currentItem = (Item *)[self.fetchedObjectsArray objectAtIndex:currentItemIndex];
    NSString * urlString = [CONST_FEED_DISCRIPTION_URL stringByAppendingString:currentItem.guid];
    [newsController initWithURLString:urlString date:currentItem.date];
    [self.navigationController pushViewController:newsController animated:YES];
    [newsController release];
}

此代码获取导航堆栈中已经存在的视图控制器,对其重新初始化,然后将其再次推送到堆栈上。这似乎一点也不正确。您可能应该创建一个新的视图控制器。这件事的背景是什么?您试图实现什么?

此代码获取导航堆栈中已经存在的视图控制器,重新初始化它,然后将其再次推送到堆栈上。这似乎一点也不正确。您可能应该创建一个新的视图控制器。这件事的背景是什么?你想实现什么?

你正在弹出、更改标题,而不是进行初始化


决定是执行
JsonViewController
(alloc、init、copy字段值)的深度克隆,还是只执行引用复制(retain)。如果你尝试混音,它会变得一团糟。

你正在弹出、更改标题,而不是进行初始化


决定是执行
JsonViewController
(alloc、init、copy字段值)的深度克隆,还是只执行引用复制(retain)。如果您尝试混合,以后会变得一团糟。

不需要保留和释放newsController对象。这就是你得到警告的原因。看起来newsController属于newsNavController对象,该对象将保留它。您需要在此代码中保留newsController的唯一原因是您需要在该方法的范围之外使用它。因为不需要保留它,所以不需要释放它,因此会出现错误。您可能会假设
-initWithURLString:date:
方法正在增加retain计数,但只有new、alloc和retain才可以这样做。您可能应该重命名该方法,使其不使用术语init以避免混淆。

不需要保留和释放newsController对象。这就是你得到警告的原因。看起来newsController属于newsNavController对象,该对象将保留它。您需要在此代码中保留newsController的唯一原因是您需要在该方法的范围之外使用它。因为不需要保留它,所以不需要释放它,因此会出现错误。您可能会假设
-initWithURLString:date:
方法正在增加retain计数,但只有new、alloc和retain才可以这样做。您可能应该重命名该方法,使其不使用术语init,以避免混淆。

您使用
-initWithURLString:date:
???你只是在添加一个url吗?那么你应该叫它
addURL…
。。。如果您确实再次初始化它,则将newsController变量的指针设置为新对象。它指向的第一个对象丢失->泄漏

我假设您将init方法命名错误,只需将url添加到已在堆栈中的控制器,然后以更高的保留计数再次添加,但仍然是同一个对象


不要这样做。复制对象或更好-创建viewController的新实例

你在用
-initWithURLString:date:
做什么???你只是在添加一个url吗?那么你应该叫它
addURL…
。。。如果您确实再次初始化它,则将newsController变量的指针设置为新对象。它指向的第一个对象丢失->泄漏

我假设您将init方法命名错误,只需将url添加到已在堆栈中的控制器,然后以更高的保留计数再次添加,但仍然是同一个对象


不要这样做。复制对象或更好-创建viewController的新实例

这是你刚开始的项目吗?如果是的话,认真考虑一下,这会让你的生活更轻松。这是一个需要支持旧版本ios的项目。。这是一个我正在调试ATM的老项目。什么旧版本的iOS?ARC支持iOS 4以后的版本。支持iOS 3或更低版本确实没有什么意义。有点离题,但我以前从未见过在已分配的实例化对象上调用
init…
方法。我可以问一下你为什么这样做吗?你用
-initWithURLString:date:
做什么???你只是在添加一个url吗?那么你应该叫它
addURL…
…它是你刚开始的项目吗?如果是的话,认真考虑一下,这会让你的生活更轻松。这是一个需要支持旧版本ios的项目。。这是一个我正在调试ATM的老项目。什么旧版本的iOS?ARC支持iOS 4以后的版本。支持iOS 3或更低版本确实没有什么意义。有点离题,但我以前从未见过在已分配的实例化对象上调用
init…
方法。我可以问一下你为什么这样做吗?你用
-initWithURLString:date:
做什么???你只是在添加一个url吗?然后你应该叫它
addURL…
…是的,就像你建议的那样,我初始化了一个新的视图控制器并按下它。我之所以想像之前那样做是为了在顶部设置一个导航栏,但现在我手动添加了一个导航栏,使其工作正常。是的,就像你建议的那样,我初始化了一个新的视图控制器并按下它。我之所以想像以前那样做,是因为在顶部有一个导航栏,但现在我手动添加了一个导航栏,这样就可以正常工作了