2012-04-16 14 views
4

私はAppleの「あなたのセカンドIOSアプリの」チュートリアル」を通じて取り組んできたと私は毎回、私は私が入力された日付オブジェクトをキャストすると予想しています日付文字列を生成するためのNSDateFormatterを使用することに気付きました。ここでキャストが必要なのはなぜですか?

例えば( Page - 。私はBirdSightingクラスにdateプロパティは常にNSDateオブジェクトであることを知っていることが

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 
} 

)「configureViewメソッドを実装するには、」下

だから私は、なぜ思っていましたチュートリアルでは常に入力をキャストしていますが、これを行うことをお勧めしている何らかの客観的なCのコンベンションやフレームワークのコンベンションはありますか?もしそうなら、なぜですか?

答えて

4

これは必須ではありません。プロパティが既にNSDateとして定義されるキャストは、単に明確にするためhereです:コア基盤を扱うときにキャストがそのフォームで必要となる

@property (nonatomic, strong) NSDate *date; 

唯一の状況は、いずれかの非円弧になります、次のように:

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

しかし、ARCに、あなたの代わりに__bridgeキャストを使用します。

2

キャストは不要で、私の意見で削除する必要があります。

このプロパティは、データモデルオブジェクトのNSDateとして既に定義されています(後で、idなどと再定義されない限り、疑わしい)ので、コードの読者に余分な情報を与えません。コンパイラ。

+1

"id"だったとしても、 "struct objc_object"というオブジェクト( "airclass"に気づく)へのすべてのポインタとしてのキャストは不要であり、互いに暗黙的に変換することができます。 'CoreFoundation'や' CoreGraphics'のように不透明な構造体を扱うのであれば、キャストが必要な唯一の場所です。 –

+1

私は、コンパイルではなくコードの明快さの観点から必要であることを意味しましたが、あなたは絶対に正しいです(いつものように!) – jrturton

関連する問題