2009-04-20 13 views
8

これは非常に初心者ですが、iPhone APIはどのデータ構造(リンクリスト、ハッシュマップなど)を提供していますか?iPhone開発:どのような種類のデータ構造が利用できますか?

+0

「NS(Mutable)Array」は必ずしもCスタイルの配列にオブジェクトポインタを格納するとは限りません。それは、Cスタイルの配列、リンクされたリスト、およびそれを使用する方法に基づいて他の任意の数の構造の間で、内部表現を動的に変更します。 –

答えて

18

のいずれかのデータ構造をiPhone SDKと共にCまたはC++に実装することができます。

たとえば、私はstandard libraryをたくさん使用します。

それに加えて、あなたはまた利用できるようにCocoaの複雑なデータ構造を使用することができます。

  1. にNSArray
  2. NSDictionaryの(ハッシュ)
  3. NSSetあなたは仲間を持つことができ

(セット)それらに関する文書here

+13

技術:Objective-C自体はこれらのクラスを提供しません。これらは* Cocoa *の一部です。 Objective-Cは使用される言語に過ぎません。大したことではありませんが、これらのことを正しく参照する習慣を身につけることは良い考えです。 ;) – hbw

+1

同意します。あなたの言っていることを反映するために私の答えを変えるつもりです。ありがとう! –

-4

Objective-C言語では、リンクリストなどの固有のデータ構造は提供されませんが、C/C++コードベースに基づいているため、CまたはC++で実装できるものはすべて直接Objective-C(リンクされたリストやその他のデータ構造を含む)

+3

Objective-Cは決して「C++コードベースに基づいていません」 C、はい、でも何でもC++を使うにはあなたの道から出なければならない(と幾分マゾヒスティックである) –

12

ココア(MacとiOSの両方の利用可能なフレームワークは)NSArrayNSDictionary、およびNSSet、並びにそれらの可変変異体を含むseveral common collection types、実装しています。 (Leopardはまた、ガーベジコレクション環境で使うのに便利な追加オプション(弱参照のような)を持つ配列/辞書/セットであるNSPointerArray,NSHashMap、およびNSHashTableも紹介しましたが、これらのクラスは現在利用できませんiPhoneはガベージコレクションをサポートしていないので、現時点ではほとんど意味がありません)。これらのクラスは非常に高速で、どのCocoaアプリケーションでも汎用目的に適しています。

(1)ビルディングブロックとしてこれらを使用してより複雑な構造を作成する、(2)既存のサードパーティコードを活用する、または(3)独自のデータ構造を最初から構築するといった選択肢があります。

1つのオプションは、私が維持しているオープンソースのObjective-CフレームワークであるCHDataStructures.frameworkです。スタック/キュー/デキュー、リンクされたリスト、ソートされたセットなど、その他の共通のデータ構造を実装しています。これらの構造は、NSCodingNSCopying(10.5+ではNSFastEnumeration)を採用しているため、ネイティブObjective-Cコードとシームレスに動作します。このプロジェクトでは、iPhoneで使用する静的ライブラリを構築することもできます。このフレームワークはオープンソースなので、必要に応じて関連するコードだけをプロジェクトに直接組み込むこともできます。

でC++とSTLの構造を使用していますが、Objective-CとC++の混在ははるかに混乱しやすく、特に初心者にとっては困惑する傾向があります。これはC++に対するbashではなく、単に「when in Rome」の原則です。 C++を使用する場合、もちろんSTLが望ましいアプローチです。既にC++でミキシングしているのであれば、STLが良い選択であるかもしれないということで、おそらく十分に快適です。そうであっても、ネイティブのCocoaコレクションを使用すると、自明で読みやすいコードが生成されます。

+3

downvoteの必要性を感じる人は、*なぜ*彼らが応答を感じるかについていくつかのフィードバックを残すなら、 "役に立たない" ... –

+1

私はNSHashMap、NSHashTableまたはNSPointerArrayがiphoneで利用できるとは思わない。 –

+1

Carlは正しいですし、私はこの情報をどこにも見つけられなかったので、明確に述べたいと思います:NSHashMap、NSHashTable、NSPointerArrayはiPhone SDKでは利用できません。ボックスポインタにNSValueを使用する方法については、この質問を参照してください: http://stackoverflow.com/questions/393662/does-using-lists-of-structs-make-sense-in-cocoa – Felixyz

関連する問題