2

次のような自動リリースプールなしでリリースを呼び出すことにより、自動リリースオブジェクトを強制できますか?

NSString *myString = [[[NSString alloc] init] autorelease];
[myString release];

通常は次のようなものです。

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *myString = [[[NSString alloc] init] autorelease];
[pool release];
4

3 に答える 3

3

文字列が過剰にリリースされるため、最初のサンプルはクラッシュします。自動解放されたオブジェクトの存続期間を制御したい場合、正しいアプローチは2番目のサンプルが行うことです。必要なときに排出できるローカル自動解放プールを作成します。

于 2012-06-04T09:07:26.260 に答える
1

グローバル自動解放プールが後でオブジェクトを解放しようとするため、コードがクラッシュします。mallocダブルフリーエラーが発生します

于 2012-06-04T09:07:38.227 に答える
1

あなたはこれを行うことができます:

NSString *myString = [[[NSString alloc] init] autorelease];

またはこれ:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *myString = [[[NSString alloc] init] autorelease];
[pool release];

しかし、これではありません:

NSString *myString = [[[NSString alloc] init] autorelease];
[myString release];
于 2012-06-04T09:08:25.947 に答える