EXC_BAD_ACCESS: сбой: self.x vs _x - PullRequest
1 голос
/ 27 мая 2011

Следующий код не дает сбоя

- (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 голосов
/ 27 мая 2011

После того, как вы объявите свойство, вы должны использовать @synthesize, чтобы сообщить компилятору сгенерировать метод получения и установки. По умолчанию эти методы называются foo и setFoo, где foo - это имя переменной. Кроме того, по умолчанию переменная, представленная свойством, имеет то же имя, что и свойство, если только вы не измените это с помощью @synthesize foo = _foo для использования в другой именованной переменной экземпляра.

...