web-dev-qa-db-ja.com

NSArrayのサイズ

NSArrayのサイズを取得し、NSLogを使用してコンソールに印刷するにはどうすればよいですか?

46
Florent
int size = [array count];
NSLog(@"there are %d objects in the array", size);
76
Alex Wayne

別の答えへの答え:

少なくともややこしい、サポートされていない* Cブードゥー教を行うことなく、配列のサイズをメガバイト単位で取得することはできません。 NSArrayはクラスクラスターです。つまり、内部でどのように実装されているのかわかりません。実際、使用される実装は 配列内のアイテムの数に応じて変化します です。さらに、配列のサイズは、配列が参照するオブジェクトのサイズとは異なります。これらのオブジェクトはヒープ上のどこかに存在するためです。オブジェクトポインタを保持する構造体でも、ヒープ上の実際のcallocのすぐ隣にNSArray 'dとは限らないため、技術的には配列の「一部」ではありません。

配列構造体自体のサイズが必要な場合は、明らかに4バイトだけです。

NSLog(@"Size: %d", sizeof(NSArray));

プリント:

2010-03-24 20:08:33.334 EmptyFoundation[90062:a0f] Size: 4

(確かに、それはまともな表現ではありません。なぜなら、NSArrayはおそらく別の種類のオブジェクト、通常はNSCFArrayのような抽象的なインターフェースだからです。NSArray.hを見ると、 'NSArrayにはインスタンス変数がないことがわかります。他のオブジェクトを保持することになっているものにはかなり奇妙ですよね?)

*「サポートされていない」とは、「推奨されない」、「クラスクラスターの内部の神秘主義を掘り下げる」、「ドキュメント化されていないプライベートAPI(存在する場合)」を意味します

10
Dave DeLong

サイズは、「カウント」をNSArrayインスタンスに送信することで決定でき、コンソールへの印刷はNSLog()を介して実行できます。例:

NSArray * array = [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
NSLog(@"array size is %d", [array count]);
5
crafterm

配列サイズの質問については、この投稿をご覧ください

Objective Cの配列の長さ

NSLogを使用してコンソールに書き込みます...

NSLog(@"The array size is %@", arraySize);
2
Chris Wagner

In Swift 4

let a = ["a"、 "b"]

a.count // 2

1
Ankit garg