【问题标题】:Memory leak on iphoneiphone内存泄漏
【发布时间】:2011-12-10 09:57:30
【问题描述】:

我有这个代码 vistaPrincipal.h

#import <UIKit/UIKit.h>

@interface vistaPrincipal : UIViewController

@property (retain, nonatomic) 
IBOutlet UIButton *botonHeros;


- (IBAction)botonHeros:(id)sender;

@end

vistaPrincipal.m


#import "vistaStrength.h"
#import "vistaPrincipal.h"



- (void)viewDidLoad

    {


     [super viewDidLoad];

    }

- (void)viewDidUnload
{

    [self setBotonHeros:nil];

    [super viewDidUnload];

}

- (IBAction)botonHeros:(id)sender {

    vistaStrength *vistaStr =[[vistaStrength alloc] initWithNibName:@"vistaStrength" bundle:nil];

    vistaStr.modalTransitionStyle=UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:vistaStr animated:YES];

    [vistaStr release];


    }

vistaStrength.h


#import <UIKit/UIKit.h>

@interface vistaStrength : UIViewController


@property (retain, nonatomic) IBOutlet UIScrollView *scrollStrength;

@property (retain, nonatomic) IBOutlet UIButton *logoStrength;

@property (retain, nonatomic) IBOutlet UIButton *logoAgility;

@property (retain, nonatomic) IBOutlet UIButton *logoIntelligence;



- (IBAction)botonRegresar:(id)sender;
@end

vistaStrength.m

#import "vistaStrength.h"
#import "vistaPrincipal.h"


- (void)viewDidLoad{

    [super viewDidLoad];

    [scrollStrength setScrollEnabled:YES];
    [scrollStrength setContentSize:CGSizeMake(320,600)];

    }


- (void)viewDidUnload{
    [self setScrollStrength:nil];
    [self setLogoStrength:nil];
    [self setLogoAgility:nil];
    [self setLogoInteligence:nil];

    [super viewDidUnload];

    }

- (void)dealloc{
    [scrollStrength release];
    [logoStrength release];
    [logoAgility release];
    [logoInteligence release];


    [super dealloc];

    }

- (IBAction)botonRegresar:(id)sender{

    vistaPrincipal *primeraVista =[[vistaPrincipal alloc] initWithNibName:@"vistaPrincipal" bundle:nil];

    primeraVista.modalTransitionStyle=UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:primeraVista animated:YES];


    [primeraVista release];
    }

在这些观点的转变中,我正在失去记忆 我能做什么?

【问题讨论】:

  • vistaPrincipalvistaStrength 负责任的公民吗?
  • 你能发布整个课程吗?看起来您的泄漏是在它们内部分配的内容中。
  • BTW:类名应该以大写字母开头。它会让你的代码更容易阅读。
  • 是的,有两个问题。首先 - 这两个视图都正确地处理了它们自己的释放。其次,丢失大量记忆是什么意思?你如何量化这个?在对象创建中?你看到泄漏了吗?

标签: iphone objective-c ios cocoa-touch memory-management


【解决方案1】:

看起来你不会回到 vista 主体,而是分配一个全新的实例? 所以 vistaPrincipal 的第一个实例仍然存在,而不是解雇 vistaStrentgh,您可以在此基础上创建一个新实例。您现在在内存中有 2 个 vistaprincipal。 如果你再次去 vista strentgh,你将有 2 个,然后是 3 个 - 它会无限增长。

在 vista 主体中,尝试调用 [self.parentViewControllerdismissModalViewController],而不是创建新的 vista 主体。如果在 ios 5 上运行,则将其设为 [self.presentingViewController dismissModalViewController]。

【讨论】:

    猜你喜欢
    • 2010-11-23
    • 2011-05-24
    • 2023-03-20
    • 1970-01-01
    • 2011-09-11
    相关资源
    最近更新 更多