2011-05-27 65 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

相關問題