iphone - iOS 应用程序泄漏

标签 iphone objective-c ios xcode

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

当我分析代码是否有泄漏时。我收到以下警告。 “对象的潜在泄漏”[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;
}

最佳答案

这条线的泄漏:

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;

这将造成保留不平衡,因为原始分配永远不会被释放,只有属性调用的保留最终被释放。

关于iphone - iOS 应用程序泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12445929/

相关文章:

iphone - iOS 上的估计电池使用时间

iphone - 如何在iOS5中使用CIColorMatrix?

ios - 尝试删除 NSUserdefault 数组中的 TableView 行

ios - 在应用程序委托(delegate)中添加的 View Controller 未出现

iphone - 从推送打开我的应用程序时执行哪个回调

iphone - NSAutoReleasePool泄漏

iphone - 使用 Storyboard的优点和缺点

ios - 无效证书 (CSR)

ios - 以编程方式将 UIButton 添加到 UINavigationBar 的 subview 并且触摸事件未注册

ios - 插页式 DFP 广告未填满屏幕