2014-02-21 6 views
1

У меня есть тест моего приложения на моем устройстве, которое оно запускает. Но когда он отправляет его в магазин приложений, я получаю журнал сбоев. Я делим его, и он показывает что-то не так в строке 70 в моем коде с ошибкой EXC_BAD_ACCESS (SIGSEGV). Я знал, что это проблема управления памятью. Но это не knwon, что неправильно в моем коде: строка 70: ​​Аварийный журнал EXC_BAD_ACCESS (SIGSEGV) iTunes connect

69: distanceLabel = [CCLabelTTF labelWithString:@"0" fontName:@"Marker Felt" fontSize:24]; 
70: distanceLabel.anchorPoint = ccp(1, 1); 
71: distanceLabel.position = ccp(size.width/2, size.height-20); 
72: distanceLabel.color = ccBLACK; 
73: [self addChild:distanceLabel z:20]; 

И в заголовочном файле я объявляю distanceLabel:

@property(nonatomic,unsafe_unretained) CCLabelTTF * distanceLabel; 

Так что проблема в моем коде?

ответ

0

Поскольку ваша переменная distanceLabel устанавливается в __unsafe_unretained он становится выпущен сразу после создания.

//Here you create an object and assign it to the variable distanceLabel 
distanceLabel = [CCLabelTTF labelWithString:@"0" fontName:@"Marker Felt" fontSize:24]; 

//Now, since your self.distanceLabel is unretianed, 
//the object you just created has a retain count of 0 
//Therefore memory management releases the object as it 
//no longer has a retianed reference to it 
//This line is now trying to access an object that doesn't exist 
70: distanceLabel.anchorPoint = ccp(1, 1); 

Если вы измените свойство retain или strong:

@property(nonatomic,strong) CCLabelTTF * distanceLabel; 

тогда ваш объект будет иметь счетчик ссылок 1 только после создания и не разрушаются в процессе сборки мусора АРК.

EDIT: подробная информация.

ARC не сборщик мусора в режиме реального времени. Он работает, когда это необходимо, но оставляет вас на своих устройствах, когда это не нужно. Из-за этого ваш код ошибочен и опасен. Это представление может быть выпущено в любое время, так как оно удерживает счет 0. Это может привести к сбою, он может работать. iTunes Connect только что нашел этот возможный крах и сказал: «Эй, это испортит ваше приложение, исправьте его».

+0

thaks много, я понимаю – user3243028

+0

Я попробую. И еще глупый вопрос: почему мой код неправильный, но он может работать очень хорошо на моем iPhone и iPod? Я только нахожу это через iTunes connect. – user3243028

+0

@ user3243028 Обновлен мой ответ с объяснением, почему он не сбой при отладке. – Putz1103

0

пытаются изменить в .h:

@property(nonatomic,retain) CCLabelTTF * distanceLabel; 

и .m:

@synthesize distanceLabel 

и ини метод инициализации:

self.distanceLabel=[[CCLabelTTF alloc] init]; 

, а затем вы влияете информацию на ваш distanceLabel

self.distanceLabel = [CCLabelTTF labelWithString:@"0" fontName:@"Marker Felt" fontSize:24]; 
self. distanceLabel.anchorPoint = ccp(1, 1); 
self.distanceLabel.position = ccp(size.width/2, size.height-20); 
self.distanceLabel.color = ccBLACK; 
[self addChild:self.distanceLabel z:20]; 

и в методе dealloc:

[self.distanceLabel release]; 

я надеюсь, что эту работу

+0

но я использую ARC, поэтому мне нужно выделить и отпустить? и разница между distanceLabel и self.distanceLable. И самое сложное - я не могу воспроизвести журнал сбоев, он хорошо работает на моем устройстве и симуляторе. – user3243028

0

1) проверить расстояниеLabel значение; 2) замените ccp на исходный CGPointMake (1.0,1.0) 3) Имеет ли свойство distanceLabel свойство anchorPoint?

Смежные вопросы