1
は私がは、私達はちょうど
テストはこのようなものであるNSObjectのが空であるかどうかをテストするためのコードをダウンロードしたかどうかの型キャストでNSDataのにNSStringのか、NSObjectのを変換することができます:
(NSData *)self length
著者はどのようにNSObjectのNSDataをそのように型変換することができますか?
は私がは、私達はちょうど
テストはこのようなものであるNSObjectのが空であるかどうかをテストするためのコードをダウンロードしたかどうかの型キャストでNSDataのにNSStringのか、NSObjectのを変換することができます:
(NSData *)self length
著者はどのようにNSObjectのNSDataをそのように型変換することができますか?
Objective-Cランタイムは、オブジェクトの実際のタイプとは関係なく、メッセージを送信します(オブジェクトはそれに応答しないと、物事はうまくいかないでしょう) 。コンパイラは "ああ、NSArrayはカウントに応答し、NSArrayだと主張していますが、カウントしているので、これは問題ありません!"
しかし、これはかなり重大で、respondsToSelectorをチェックした後に(NSArray *)の代わりに(id)にキャストすることは、「これが何であるかわからないこの方法"。
なぜ、まったく気にしないのですか?もしあなたが(id)を実行していると、(id)respondsToSelector length –
いいえ、私はちょうどチェックしたことを示すコンパイラの警告が出ると思います。あなたはしないし、それがキャストする理由です。 (テストプログラム:#import int main(){ NSString * test = @ "test"; [(id)テストカウント]; }}) –