EXC_BAD_ACCESS崩溃:self.x vs _x

时间:2011-05-27 00:19:29

标签: objective-c properties exc-bad-access

以下代码不会崩溃

- (void) locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
{
    _heading = newHeading.trueHeading;
    NSLog(@"heading - %.2f", newHeading.trueHeading);
    //NSLog(@"Updating heading - %f", newHeading.trueHeading);
}

这个在哪里

- (void) locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
{
    self.heading = newHeading.trueHeading;
    NSLog(@"heading - %.2f", newHeading.trueHeading);
    //NSLog(@"Updating heading - %f", newHeading.trueHeading);
}

有人可以解释为什么会这样吗?该属性看起来像:

@property (nonatomic, assign) float heading;

它也从未在init方法中初始化,因为我不希望在它正确之前存储值。现在是:

- (id) initUser
{
    return [self init];
}

1 个答案:

答案 0 :(得分:0)

声明属性后,应使用@synthesize告诉编译器生成getter和setter方法。默认情况下,这些方法名为foo和setFoo,其中foo是变量的名称。此外,默认情况下,属性表示的变量与属性具有相同的名称,除非您使用@synthesize foo = _foo更改它以使用其他命名实例变量。