0

重複の可能性:
allocとallocWithZoneの違いは何ですか?

allocWithZoneオブジェクト自体に近いメモリ位置を使用することでパフォーマンスを向上させるのに役立つという記事を読みました。これは本当ですか?allocWithZoneの代わりに使用することをお勧めしますallocか?allocとallocWithZoneの違いは何ですか?

証明された例は次のとおりです。

- (id)init
{
   if (self = [super init])
   {
      _myString = [[NSString allocWithZone:[self zone] init]];
   }

   return self;
}
4

2 に答える 2

3

最初のARCはzone、オブジェクトの呼び出しを禁止します。すべてのものがそのように動いているので、それは使用しないのに十分な理由のようallocWithZoneです。

allocWithZoneに準拠して、私が使用することを知っている1つの良い使用法がありますNSCopying

@protocol NSCopying
- (id)copyWithZone:(NSZone *)zone;
@end

ゾーンパラメータを完全に無視することはできますが、私は次のようなことをするのが好きです。

-(id)copyWithZone:(NSZone *)zone{
    SampleClass *copy = [[SampleClass allocWithZone:zone] init];
    copy->_myString = [_myString copyWithZone:zone];
    return copy;
}

それ以外は、前の質問に投稿されたものよりも多くのことを言うことはないと思います。

于 2011-11-16T03:49:16.223 に答える
2

馬の口からまっすぐ:

NSZoneを使用する必要はもうありません。NSZoneはとにかく最新のObjective-Cランタイムでは無視されます。

(これはARCリリースノートからのものです。Appleがドキュメント構造を再び壊した後にこれを読んでいる人のために。)

メモリゾーンはかつては多少便利でしたが、Cocoaはかなり完全にそれらから離れました。NSZoneは痕跡の尾のようなもので、ARCとlibautoGCの両方がそれを遮断します。AppleのエンジニアであるBillBumgarnerが、bryanmacのデュープに関するコメントで指摘したように、それらは単に扱いにくく、Cocoaではあまり効果がありませんでした。

于 2011-11-16T04:00:17.587 に答える