Получаю вышеуказанное сообщение в XCode 4.6. Я провел довольно тщательный поиск, но ничего похожего не соответствует точным обстоятельствам, связанным с моей проблемой. По общему признанию, я относительно новичок в iOS-разработчике, и управление памятью никогда не было моим сильным костюмом, но это только меня полностью разозлило.EXC_BREAKPOINT: сообщение отправлено на освобожденный экземпляр
У меня есть экземпляр переменной , который определен в классе Game
следующим образом:
@interface Game : NSObject
// Class objects
@property(nonatomic,retain) NSMutableArray *queryItems;
@property(nonatomic,retain) NSMutableArray *theArray;
@property(nonatomic,retain) NSString *theLink;
@property(nonatomic,retain) NSString *thePath;
устанавливается в makeGame
метода, который называется в методе initialiseGame
на мой взгляд контроллера:
- (void) initialiseGame
{
bool gameCreated = FALSE;
while (!gameCreated)
{
gameCreated = [theGame makeGame:@"ptl"];
}
[loadingIndicator stopAnimating];
[loading setText:@"Tap to Start"];
[self performSelector:@selector(setLabels) withObject:nil afterDelay:0.0];
}
(Примечание: Выполнение функции выбора AfterDelay используется, чтобы разрешить просмотр до того, как продолжить. Немного взломать, но я не мог бы лучше поработать!)
Приложение затем загружает игру, и когда пользователь нажимает на экране, чтобы начать, следующий метод, который вызывается из контроллера представления является:
- (void) setupLink
{
...
for(int i=0; i<[theGame.theLink length]; i++) {
...
}
}
Именно на этой ссылку на theGame.theLink
, где I» Я получаю крах.
Что имеет меня больше запутаться в том, что если я называю theGame.theLink
внутри метода initialiseGame
, он отображается правильно, а также вызовом любой другой переменной из Game
класса (например, thePath
или theArray
работает отлично, поэтому theGame
объект не имеет был удален в полном объеме, только переменная .
Мне кажется, что переменная освобождается где-то, когда контроллер вида обновляется. Я не выпустил переменную и не могу решить, почему только эта переменная освобождается. Как я уже сказал, управление памятью не является моей силой!
Любая помощь/идеи были бы чрезвычайно оценены. Дайте мне знать, если вам потребуются более подробные сведения.
Благодарности куч, Andrew
EDIT: Установка в makeGame
- (bool) makeGame:(NSString*)gameType
{
...
[self getLink];
}
- (void) getLink
{
...
if (... && ((arc4random() % 10) > 8))
{
theLink = @"Animals";
}
}
Есть много различных способов могут быть установлены, в зависимости от случайных чисел и других факторов. Это самая простая форма, которая просто устанавливает ее в статическую строку. Неважно, как установлен или что он установлен, программа всегда сбой в одной и той же точке.
Есть ли причина, по которой вы используете ручное управление памятью вместо ARC? Этот тип проблемы реже встречается при использовании ARC. –
не хватает кода. Когда вы вызываете initialiseGame? когда вы вызываете setupLink? кажется, что thegame освобожден, но не theGame.theLink. – wihing
Даже если это не повлияет на вашу текущую проблему, вы все равно должны использовать атрибут 'copy' для изменяемых переменных экземпляра. – Till