2012-04-16 140 views
4

我已經通過蘋果的「你的第二個iOS應用程序」教程的學習」,我已經注意到,每次我用一個NSDateFormatter生產日期字符串,我預期蒙上輸入日期對象。爲什麼這裏需要演員?

如( Page - 。「爲了實現configureView法」

BirdSighting *theSighting = self.sighting; 

if (theSighting) { 
    self.birdNameLabel.text = [theSighting name]; 
    self.locationLabel.text = [theSighting location]; 

    self.dateLabel.text = [formatter stringFromDate:(NSDate *)theSighting.date]; // Here 
} 

但是我知道,在BirdSighting類的date屬性始終是一個NSDate對象下)

所以我想知道爲什麼本教程總是強調輸入,是否有某種客觀 - 約定或框架對話建議您這樣做?如果是的話,爲什麼?

回答

4

這沒有必要。演員僅僅是爲了清楚起見,作爲屬性已經被定義爲NSDatehere

@property (nonatomic, strong) NSDate *date; 

其中鑄造是必要的,這種形式的唯一情況要麼與核心基礎打交道時處於非圓弧,像這樣:

CFDateRef asCFDate; 
NSDate *asNSDate = (NSDate *) asCFDate; 

但是,在ARC中,您將使用__bridge cast來代替。

2

演員陣容是不必要的,應該刪除在我看來。

的屬性已被定義作爲數據模型對象上的NSDate(除非有它重新定義到id或東西,這是令人懷疑的後面的步驟中),所以它是給沒有額外的信息提供給代碼或讀者編譯器。

+1

即使它是'id',轉換仍然是不必要的,因爲所有指向對象「子類」(注意空氣引號)的結構體objc_object都可以隱式轉換。如果處理一個不透明的結構,比如'CoreFoundation'或'CoreGraphics',那麼只需要進行強制轉換。 – 2012-04-16 14:59:22

+1

我的意思是代碼清晰而不是彙編,但你絕對正確(像往常一樣!) – jrturton 2012-04-16 15:43:34