0

どうしてできないの

NSLog(@"mySet count: %@", [mySet count]);

その後NSSetを使用しますか?(使用すると、アプリは「EXC_BAD_ACCESS」でクラッシュします

変更可能/不変、保持、コピー、自動解放...あらゆる種類のセットを試しましたが、カウントメッセージの後、それらはすべて役に立たなくなり、クラッシュします。そして、カウントしない場合、それらは期待どおりに動作し、次のように出力すると:

NSLog(@"mySet: %@", mySet);

大丈夫だよ!問題はカウントだけにあるようです。

誰かが私にこれを説明できますか?この奇妙な動作について検索しましたが、何も見つかりませんでした

4

1 に答える 1

3

これがクラッシュする理由[mySet count]は、整数を返し、%@書式指定子がオブジェクトを想定しているためです。次のように変更します。

NSLog(@"mySet count: %lu", [mySet count]);

これは、Objective C の「落とし穴」の 1 つです (C または C++ に精通している場合を除きます): データがオブジェクトである場合と、データがオブジェクトではない場合があります。これは、C コードとの互換性のために必要です。

于 2011-07-02T18:53:12.310 に答える