J'ai la classe suivante qui est un wrapper autour d'un ABPerson (ABRecordRef):EXC_BAD_ACCESS en essayant de libérer un ABRecordRef
@interface Recipient : NSObject {
ABRecordRef person;
}
- (id)initWithPerson:(ABRecordRef)person;
@end
@implementation
- (id)initWithPerson:(ABRecordRef)_person {
if(self = [super init]) person = CFRetain(_person);
return self;
}
- (void)dealloc {
if(person) CFRelease(person);
[super dealloc];
}
@end
J'ai laissé quelques-unes des méthodes sur, mais ils ne sont pas pertinentes à cette question.
Tout fonctionne bien, sauf que je reçois un EXC_BAD_ACCESS
sur la ligne if(person) CFRelease(person);
. Pourquoi cela arrive-t-il? Je n'appelle pas CFRelease ou CFRetain du tout ailleurs dans mon application.
Edition, une autre note: Si j'ajoute ce droit avant la ligne CFRelease:
NSLog(@"retain count is %d", CFGetRetainCount(person));
Il imprime retain count is 1
Est-il possible que l'objet ABRecordRef 'person' ait un objet interne qui est supprimé avant que CFRelease ait été appelé ?? – Justin
C'est possible, mais j'ai regardé, et je ne peux pas imaginer où cela serait. – synic
Eh bien, il n'y a rien de mal avec ce code que je peux voir, alors soit vous faites quelque chose dans d'autres méthodes ou Justin a la réponse – Andiih