Obj-C: вызов release / dealloc вызывает EXC_BAD_ACCESS - PullRequest
1 голос
/ 11 июня 2010

Вот мой пользовательский класс:

PolygonShape : NSObject {
 int numberOfSides;
 int minimumNumberOfSides;
 int maximumNumberOfSides;
}

Мой пользовательский метод init:

- (id)initWithNumberOfSides:(int)sides minimumNumberOfSides:(int)min maximumNumberOfSides:(int)max {
 if (self = [super init]) { 
  [self setMinimumNumberOfSides:min];
  [self setMaximumNumberOfSides:max];
  [self setNumberOfSides:sides];
 } 

 return self;
}

Мой метод dealloc:

- (void) dealloc {
 NSLog("Calling dealloc");
 [super dealloc];
}

Мой пример кода, который вылетает:

  PolygonShape *shape1 = [[PolygonShape alloc] initWithNumberOfSides:6 minimumNumberOfSides:5 maximumNumberOfSides:9];
 [shape1 release];

Я выделил PolygonShape, увеличив счетчик хранения на 1, а затем релиз должен уменьшить его до 0 и вызвать dealloc, распечатав это сообщение в NSLog, но я просто получаю EXC_BAD_ACESS.Я могу получить доступ и изменить поля в моем объекте после его создания, чтобы все работало до тех пор, пока все не заработает.Большое спасибо за помощь!

Ответы [ 3 ]

6 голосов
/ 11 июня 2010
NSLog("Calling dealloc");

Вы передаете обычную строку C, а не строку NSString.Вам нужно сделать следующее:

NSLog(@"Calling dealloc");

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

0 голосов
/ 11 июня 2010

На какой линии происходит сбой? Может ли ошибка быть в одном из методов, которые вы вызываете в initWithNumberOfSides?

Если выполнение «сборки и отладки» для определения места сбоя не помогает, я бы включил NSZombieEnabled , чтобы найти проблему (не забудьте снова ее отключить!)

0 голосов
/ 11 июня 2010

Вы добавили их в @interface ...

@property(assign) int numberOfSides, minimumNumberOfSides, maximumNumberOfSides;

и в @implementation?

@synthesize numberOfSides, minimumNumberOfSides, maximumNumberOfSides;

Сеттеры не будут генерироваться автоматически, если толькоВы явно @synthesize это.

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