0

親愛なるiOS開発者の皆さん、

私はまだARCなしで開発中です(切り替えは近日公開予定)。iOSの初心者との興味深い議論の後、propertyARC以前のAppleドキュメントから継承したretainプロパティ(これを呼びましょう)を初期化する方法を紹介しました。時代:

NSObject *tmpProperty = [[NSObject alloc] init];
self.property = tmpProperty;
[tmpProperty release];

これには大きなメリットがあります。メモリ管理が明確になります。

大きな欠点もあります。非常に基本的なものの場合、3行かかります。だから私たちは仮定しました:なぜ次の解決策ではないのですか?

self.property = [[[NSObject alloc] init] autorelease];

メモリ管理についてはあまり明確ではありませんが、はるかにコンパクトです(そして、ARC移行を実現しやすくします)。

あなたは自分自身を何を使っていますか?これらの1つが他よりも明らかに優れたソリューションだと思いますか?

4

3 に答える 3

0

使用するメモリが少ないため、可能な限り最初のものを使用しています。2番目のケースでは、実行ループが終了すると、割り当てたオブジェクトが解放されます。これは、このコードがforループまたはテーブルビューセルにある場合に重要になる可能性があります。状況によっては、これにより「メモリ警告」と「すべてが正常」の違いが生じる可能性があります。

ちなみに、ARCに切り替えてください。

于 2012-09-12T10:16:12.263 に答える
0

両方の少し。コンベンションで「どちらか一方」と言われるべきではないと思います。

ワンライナーは、1行だけが必要な場合にうまく機能します。所有権は追加の読書を必要としません。

さらに初期化が必要な場合(設定する前self.propertyなど)、または場合によっては、オブジェクトが自動解放プールに追加される可能性や、オブジェクトの破壊がより予測可能になる可能性を最小限に抑えたい場合は、2番目を優先することができます。

ただし、ARCに移行しようとしている場合は、それほど心配する必要はありません。その場合、多くの変更が行われ、移行後に利益が得られずに余分な作業が行われる可能性があります。

于 2012-09-12T10:16:38.457 に答える
0

初期化するオブジェクトの存続期間を制御できないため、自動解放を使用することは決して優れたオプションではありません。そのため、次のような場合があります。

ViewControllerで、プロパティなどのオブジェクトを初期化し、他のビューに切り替えています。古いViewControllerに戻ってオブジェクトにアクセスする場合は、iOSによってリリースされ、アプリがクラッシュする可能性があります。

できるだけ早くARCに切り替えるのが最善の選択肢だと思います。ARCはすべての開発者が使用する必要があると思います。ほとんどすべてのデバイスがiOS5アップデートによって提供されているため、古いデバイスをサポートする可能性はほとんどないかもしれません。

これがあなたの疑問を解決することを願っています

于 2012-09-12T10:18:32.170 に答える