崩溃日志EXC_BAD_ACCESS(SIGSEGV)iTunes连接

时间:2014-02-21 14:39:29

标签: ios

我在我的设备上测试了我的应用程序。但是当它将它提交到app store时,我会收到崩溃日志。我使用EXC_BAD_ACCESS(SIGSEGV)错误在代码中的第70行显示错误。 我知道这是内存管理问题。但它并没有在我的代码中找出错误: 第70行:

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;

那么我的代码中有什么问题?

3 个答案:

答案 0 :(得分:0)

尝试改变.h:

@property(nonatomic,retain) CCLabelTTF * distanceLabel;

和.m:

@synthesize distanceLabel

和ini方法init:

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];

我希望这项工作

答案 1 :(得分: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);

如果您将房产更改为retainstrong

@property(nonatomic,strong) CCLabelTTF * distanceLabel;

然后你的对象在创建之后将具有1的引用计数,而不会被ARC的垃圾回收破坏。

编辑:更多信息。

ARC不是实时垃圾收集器。它可以在需要时工作,但在不需要时将其留给您的设备。因此,你的代码是错误和危险的。该视图可以随时释放,因为它的保留计数为0.它可能会崩溃,它可能会运行。 iTunes Connect刚发现这种可能的崩溃并说“嘿,这会破坏你的应用程序,请修复它”。

答案 2 :(得分:0)

1)检查distanceLabel值; 2)用原始CGPointMake替换ccp(1.0,1.0) 3)你的distanceLabel确实有anchorPoint属性吗?