私は 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
か?