私は本「Programming in Objective C」を読んでいますが、彼はid
型についてあまり説明しておらず、あまり演習もしていませんでしid
た。 ? (彼はそれに関するいくつかの問題を説明したので)
私はそれが使用されていると確信しています。それが唯一の解決策であるいくつかのケースに言及できれば素晴らしいと思います..ある種のアプリ開発からの実際のプログラミングケースのように。
私は本「Programming in Objective C」を読んでいますが、彼はid
型についてあまり説明しておらず、あまり演習もしていませんでしid
た。 ? (彼はそれに関するいくつかの問題を説明したので)
私はそれが使用されていると確信しています。それが唯一の解決策であるいくつかのケースに言及できれば素晴らしいと思います..ある種のアプリ開発からの実際のプログラミングケースのように。
id
はObjectiveCのユニバーサルタイプです。これは、、*
などの任意のObjective-Cタイプを表すことができます。Objective-Cの優れた点は、にメッセージを送信できることです。メッセージの場合、送信者が実際のタイプを知らなくても、通常どおり処理されます。NSString *
NSArray *
id
一般的なものを定義するときに一般的に使用されます。たとえば、NSArray
はid
sの配列です。NSNumber
特定の種類のオブジェクト(たとえば、NSString
など)をコンテナーに入れるのはプログラマーの責任です。これは、Objective-Cの他の多くの場所で使用されます(IBAction
インターフェイスビルダーのを定義するとき、init
メソッドを定義するときなど)。
これid
は、包括的なデータ型のようなものです。任意の型の値を保持するために使用されます。
一般的な用途は、init...
メソッドの戻り値の型です。任意のオブジェクトを保持できるため、コレクション クラスで使用されます。さまざまな getter メソッドの戻り値と、可変バージョンのコレクション クラスでオブジェクトを追加/設定するためのさまざまなメソッドを参照してください。
また、任意のクラスであるがプロトコルに準拠する必要があるオブジェクトへの参照が必要な場合に、プロトコルと組み合わせて使用されます。例には、 などのデリゲート プロパティの多くが含まれますUITableView
delegate
。
id は、Objective-C の汎用オブジェクト型です。あらゆるオブジェクトを保持できます。
実際の例の 1 つ: ルート要素が配列であるか辞書であるかがわからない json の解析。しかし、 id はそれらの両方を取ります。
私はよく使用しますが、多くの場合、プロトコル定義と組み合わせて使用します: id<NetworkPrinterProtocol>
. これは、あらゆる種類のオブジェクトである必要がありますが、NetworkPrinterProtocol を満たすことを意味します。デリゲートの定義によく使用されます。
WP: Objective-C — 動的型付けを参照してください