【问题标题】:iphone programming + moving from one view to another leaking memoryiphone编程+从一个视图移动到另一个泄漏内存
【发布时间】:2011-09-25 12:41:30
【问题描述】:

我有一个 MarshViewController.h 类,我正在使用以下代码从一个视图控制器移动到另一个。

#import "ExpertGameController.h"
@interface MarshViewViewController : UIViewController<UIAlertViewDelegate> {
ExpertGameController *nextExpertGame;
}
@property(nonatomic,retain)ExpertGameController *nextExpertGame;

在 .m 中我已经合成了它,我正在使用以下方法。我已经发布了 nextExpertGame 但它仍然会泄漏内存

-(IBAction)expertGame
{

    nextExpertGame=[[ExpertGameController alloc]initWithNibName:@"ExpertGameController" bundle:nil];
     [self.navigationController pushViewController:nextExpertGame animated:YES];
    [nextExpertGame release];

}

感谢任何帮助。

【问题讨论】:

  • 上面的代码没有泄漏,所以它可能在 ExpertGameController 内部。您从未正确使用 nextExpertGame 属性。如果不存储控制器,要么删除该属性,要么使用 self.nextExpertGame = [[[... ] ...] autorelease]; 并在 dealloc 中释放 nextExpertGame。

标签: iphone objective-c memory memory-leaks


【解决方案1】:

当您分配控制器时,您给它的保留计数为 1,当您将它推送到导航控制器时,您给它的保留计数为 2,然后当您释放它时,您将保留计数降低到 1。您从导航控制器弹出该视图控制器,保留计数将降至 0,然后将从内存中释放。

【讨论】:

  • 我可以执行以下操作吗 - (void)dealloc { [navigationController release]; [超级释放]; }
  • 您不需要,navigationController 由应用程序委托拥有,并且应该在应用程序运行的整个过程中保留。
【解决方案2】:

从一个视图移动到另一个视图的更简单方法如下代码所示:

#import "ExpertGameController.h"
@interface MarshViewViewController : UIViewController<UIAlertViewDelegate> {

      //Your declared variables
}


-(IBAction) expertGame {

ExpertGameController *objExpertGameController = [[ExpertGameController alloc]  initWithNibName:@"ExpertGameController" bundle:nil]; 

[self.navigationController pushViewController: objExpertGameController animated:YES];
[objExpertGameController release];

}

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    相关资源
    最近更新 更多