сообщение отправлено освобожденному экземпляру 0x141dafb0 iPhone SDK - PullRequest
1 голос
/ 09 сентября 2010

Я получаю сообщение об ошибке "отправлено освобожденному экземпляру 0x141dafb0", когда он поступает из UIBarButtonItem, когда его приложение нажимается на приложении. любая помощь будет принята с благодарностью

Ошибка:

 *** -[PeerConnection performSelector:withObject:withObject:]: message sent to deallocated instance 0x14143ff0

PeerConnection.h

#import <UIKit/UIKit.h>
#import <GameKit/GameKit.h>

@interface PeerConnection : NSObject <GKPeerPickerControllerDelegate, GKSessionDelegate> {
 UIBarButtonItem *StartConnection;
}

- (IBAction) StartConnectionAction;

@property (nonatomic, retain) IBOutlet UIBarButtonItem *StartConnection;

@end

PeerConnection.m

    #import "PeerConnection.h"


@implementation PeerConnection
@synthesize StartConnection;


- (IBAction) StartConnectionAction {
 NSLog(@"Start Connection to the other IPhones");
 [StartConnection release];
}

- (void)dealloc {
 [super dealloc];
}

@end

Я включил Зомби, и это все, что он мне дает

Ответы [ 5 ]

2 голосов
/ 09 сентября 2010

Не отпускайте кнопку StartConnection, пока -dealloc.Выпуск этого элемента панели кнопок в -StartConnectionAction - ваша проблема - все, что пользовательский интерфейс попытается сделать с ним после этого, вызовет зомби.

1 голос
/ 10 марта 2011

В вашем случае вы освободили объект StartConnection.Теперь, когда вызывается автоматический dealloc, ссылка не была найдена (как уже удалено), и, следовательно, вы получили ошибку.

0 голосов
/ 22 июля 2012

Старая тема;Но подумал, что могу добавить.

Если ваше приложение не использует ARC;Используйте функцию анализа, чтобы найти все проблемы, которые могут возникнуть из-за освобождения / удержания объектов.

Ярлык command + shift + B

Очень полезно!

0 голосов
/ 20 октября 2011

У меня была та же ошибка, но я использовал синглтон с авто-выпуском по общедоступному методу, снял с него авто-релиз и добавил его в dealloc, и теперь все работает нормально.

0 голосов
/ 10 марта 2011

Это может быть связано с доступом к экземпляру, который уже удален во время GC. Ошибка возникает в случае, когда вы используете авто-релиз.

ThePlannerAppDelegate *delg = [(ThePlannerAppDelegate *)[[UIApplication sharedApplication] delegate] autorelease];

Теперь, скорее всего, GC уничтожит ссылку, хотя delg указывает на делегат главного окна.

Моя точка зрения - безопасно использовать авто-релиз.

Важное замечание: Ошибка произойдет, когда сообщение будет отправлено по недействительной ссылке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...