我有一个基于导航的应用程序,在第一个 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/