iOS App漏洞

时间:2012-09-16 09:49:54

标签: iphone objective-c ios xcode

我有一个基于导航的应用程序,第一个视图上有几个按钮(不使用ARC)。通过触摸一个按钮optionPressed被触发以推送到另一个视图。

当我分析代码泄漏时。我收到以下警告。 “对象的潜在泄漏”[self.displayViewController setCurrentPhoto:sender.currentTitle];

我应该如何释放self.displayViewController以及它是否是原因。

·H

#import <UIKit/UIKit.h>
#import "DisplayViewController.h"

@class DisplayViewController;

@interface Pocket_DjangoViewController : UIViewController 


- (IBAction)optionPressed:(UIButton *)sender;

@property (retain, nonatomic) DisplayViewController *displayViewController;


@end

的.m

- (IBAction)optionPressed:(UIButton *)sender 
{

    if (!self.displayViewController) {
        self.displayViewController = [[DisplayViewController alloc] initWithNibName:@"DisplayViewController" bundle:nil];
    }

    [self.displayViewController setCurrentPhoto:sender.currentTitle];
    [self.navigationController pushViewController:self.displayViewController animated:YES];

    //[self.displayViewController release];
    //self.displayViewController = nil;
}

1 个答案:

答案 0 :(得分:2)

泄漏源于这条线:

self.displayViewController = [[DisplayViewController alloc] initWithNibName:@"DisplayViewController" bundle:nil];

你应该:

self.displayViewController = [[[DisplayViewController alloc] initWithNibName:@"DisplayViewController" bundle:nil] autorelease];

在您的实际代码中,您正在创建一个对象:

[[DisplayViewController alloc] initWithNibName:@"DisplayViewController" bundle:nil]; 
已保留的

;然后将其分配给保留属性:

@property (retain, nonatomic) DisplayViewController *displayViewController;

这将创建一个保留不平衡,因为原始的alloc永远不会被释放,只有属性调用的retain最终会被释放。