2012-11-23 68 views
0

考慮下面的代碼在每次獲取時新創建的NSManagedObject屬性的值?

NSManagedObject *o = ... ; 

o.myProperty = [NSDate date]; 

NSDate *a = o.myProperty; 
NSDate *b = o.myProperty; 

BOOL identical = (a==b); 
BOOL equal = [a isEqual:b]; 

與iOS在我的iPhone上運行這5套identical = NOequal = YES

這是預期的行爲?我會認爲讀取一個屬性總是返回相同的對象,並且每次調用getter時都不會創建一個新對象。

或者這是iOS中的錯誤?

+0

NSLog的%p格式,你會明白爲什麼。 – CodaFi

+0

當然,我知道'a'和'b'指向不同的對象。我只是想知道爲什麼這樣,因爲我正在從管理對象讀取同一個屬性。 – Tom

+0

==比較指針,而不是它們指向的內容。 –

回答

0

那麼,如果你是比較對象,那麼總是使用equalObjects:而不是僅僅使用==比較運算符。順便說一下,在這種情況下,您應該使用compare:方法來比較它們是否相同。在你的情況下,你應該這樣使用它,

[a compare:b] == NSOrderedSame // both the date are same, whatever the object br