2011-08-02 14 views
2

プロジェクトの分析中に、XcodeにカスタムUIBarButtonItemでposibeリーク通知が表示されました。 リークを修正しましたが、ビューを2回目に読み込んでいる間に[super dealloc]がEXC_BAD_ACCESSエラーを出します。 UIBarButtonItemから自動解放を取り外しsuper dealloc EXC_BAD_ACCESSエラー

(SO警告を返す):画面をリロードしながら

self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:toolbar] autorelease]; 

は何の問題を与えません。

カスタムUIBarButtonItemとのdeallocコード:NSZombieEnabledで

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // create a toolbar to have the buttons at the right side of the navigationBar 
    UIToolbar* toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 150, 44.01)]; 
    toolbar.tintColor = [UIColor clearColor]; 
    [toolbar setTranslucent:YES]; 

    // create the array to hold the buttons, which then gets added to the toolbar 
    NSMutableArray* buttons = [[NSMutableArray alloc] initWithCapacity:4]; 


    // Create a comments button 
    propertiesButton = [[UIBarButtonItem alloc] 
         initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:self action:@selector(properties)]; 
    [buttons addObject:propertiesButton]; 
    [propertiesButton release]; 

    // Create a comments button 
    commentaryButton = [[UIBarButtonItem alloc] 
         initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:self action:@selector(comments)]; 
    [buttons addObject:commentaryButton]; 
    [commentaryButton release]; 

    // create a versions button 
    versionsButton = [[UIBarButtonItem alloc] 
         initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(versions)]; 
    [buttons addObject:versionsButton]; 
    [versionsButton release]; 

    // create a save button 
    downloadButton = [[UIBarButtonItem alloc] 
         initWithBarButtonSystemItem:UIBarButtonSystemItemOrganize target:nil action:@selector(download)]; 
    [buttons addObject:downloadButton]; 
    [downloadButton release]; 

    // stick the buttons in the toolbar 
    [toolbar setItems:buttons animated:NO]; 

    [buttons release]; 

    // and put the toolbar in the nav bar 
    self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:toolbar] autorelease]; 
    [toolbar release]; 
} 

- (void)dealloc 
{ 
    [popOverController release]; 
    [propertiesButton release]; 
    [downloadButton release]; 
    [versionsButton release]; 
    [commentaryButton release]; 
    [webView release]; 
    [super dealloc]; 
} 

私たちが問題を解決する方法がわからない

'2011-08-01 10:30:36.571 ProjectName[100:707] *** -[UIBarButtonItem release]: message sent to deallocated instance 0x1fb330' 

を取得します。

ありがとうございます。

答えて

4

propertiesButton、downloadButton、versionsButton、およびcommentaryButtonを2回リリースしています。初めてviewDidLoadに、さらにdealloc

すでにviewDidLoadにリリースされているので、deallocでリリースする必要はありません。

+0

非常に感謝!私がdeallocメソッドにそれらを追加するプロパティを作成しているときは、ルーチンです。しかし、私はそれを他のオブジェクトを介して渡しているときにも私もそれらをリリースします。それでもなおxcodeは、問題は[super dealloc]にあると言っています。ありがとうございました1 – Justin

+0

ようこそ! Juzzz! – EmptyStack

0

あなたは配列に追加した後、あなたはすでにあなたのUIBarButtonItem年代をリリース - あなたははdeallocメソッドで再びそれらを解放しないしなければならない -

0

をそれらの余分リリースはすでにボタンを割り当て解除するメッセージを送信するには、結果を呼び出し、アプリのクラッシュを作ります私はそれを見て、あなたはあなたのボタンを2回リリースしています。あなたのviewDidLoad()関数で初めて、そして最後にあなたのdealloc関数で。

関連する問題