3

私は Objective-C と ARC を初めて使用し、答えが見つからないまま何時間も検索して読んでいます。コードは私がやりたいことを実行しますが、好ましい条件に依存していないことを知りたいです。これが私のコードの簡略版です:

+(void)foo {
    Class *classes = (__unsafe_unretained Class *)malloc(sizeof(Class) * someValue);

    // Perform work without complicated memory management

    free(classes);
}

割り当てている構造については、あまりできません。objc_getClassListによって埋められます。残念ながら、Apple はドキュメントを更新して、ARC でこれを行う方法を説明していないようです。上記の型キャストは、例を見て部分的に考え出されたものですが、それでも私は緊張します。

私の懸念の 1 つは、「通常の」オブジェクトにスペースを割り当てdeallocた場合、変数がスコープ外になったときに呼び出され、それfreeが呼び出された後に発生することです。しかし、それがまさにここで起こっていることだとは思いません。

  • Class他の種類の Objective-C データ型とは動作が異なりますか? 私はそれから何か他のものを期待すべきですか?
  • ポインタとはclasses何ですか?不明なサイズの配列 (非オブジェクト ポインター) を参照していると思いますが、そのキャストなしではコードがコンパイルされないため、ARC は依然としてそれを気にかけています。強力なポインタのように見えますが、何が強力なポインタになるのかわかりません。
  • 配列内のオブジェクトへの強いポインタはありますか?それとも、オブジェクト自体が強いポインタですか? そうでない場合、ARC は引き続き機能しますか? それとも、いくつかの MRC 規則に戻す必要がありますか?
  • への自動呼び出しはありdeallocますか? コンパイラは、いつ、どのようにしてそれが起こることを保証できますか?
  • classesに設定してからNULL呼び出しを行う方が良い方法freeですか? または、配列を反復処理して、オブジェクトを に設定するなど、すべてのオブジェクトについて何かを行う必要がありますnilか?
4

2 に答える 2