2011-05-27 68 views
1

下面的代码不会崩溃EXC_BAD_ACCESS崩溃:self.x VS _x

- (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]; 
} 
+4

你有@合成你的财产吗? – omz 2011-05-27 00:37:35

+0

我猜他会这样做或提供的方法,否则它甚至不会编译。 – 2011-05-27 11:47:32

回答

0

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

+0

正确的排序。如果您不使用'@ synthesize',则需要提供自己的[访问器](http://developer.apple.com/library/ios/#documentation/General/Conceptual/DevPedia-CocoaCore/AccessorMethod.html)符合[KVC](http://developer.apple.com/library/ios/#documentation/General/Conceptual/DevPedia-CocoaCore/KeyValueCoding.html#//apple_ref/doc/uid/TP40008195-CH25-SW1) – Abizern 2011-05-27 11:40:01

相关问题