0

最初のビューにいくつかのボタンがあるナビゲーション ベースのアプリを使用しています (ARC を使用していません)。1 つのボタン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;
}
4

1 に答える 1

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;

元の割り当ては決して解放されず、プロパティによって呼び出された保持のみが最終的に解放されるため、これにより保持の不均衡が生じます。

于 2012-09-16T10:02:39.100 に答える