我在我的设备上测试了我的应用程序。但是当它将它提交到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;
那么我的代码中有什么问题?
答案 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);
如果您将房产更改为retain
或strong
:
@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属性吗?