2

NSArrayおよびNSStringオブジェクトを 使用して保持カウントをログに記録すると、不均一な動作が発生します。以下のコードを参照してください。

NSArray *aryTemp = [NSArray arrayWithObjects:@"One",nil];
NSLog(@"Retain Count :%d",[aryTemp retainCount]);

NSArray *aryTemp2 = [[NSArray alloc] initWithObjects:@"One",nil];
NSLog(@"Retain Count :%d",[aryTemp2 retainCount]);

NSString *strTemp = @"One";
NSLog(@"Retain Count :%d",[strTemp retainCount]);

NSString *strTemp2 = [[NSString alloc] initWithString:@"One"];
NSLog(@"Retain Count :%d",[strTemp2 retainCount]);

そして、これは私が得ている出力です

2011-03-01 19:19:32.410 Test[14607:207] Retain Count :37
2011-03-01 19:19:32.412 Test[14607:207] Retain Count :1
2011-03-01 19:19:32.413 Test[14607:207] Retain Count :2147483647
2011-03-01 19:19:32.413 Test[14607:207] Retain Count :2147483647

コードの何が問題になっていますか??

ありがとう

プラティック・ゴスワミ

4

4 に答える 4

7

2147483647 に問題はありません

2147483647 は INT_MAX です。INT_MAX は、文字列リテラル (つまり、コードで定義された @"foo" 文字列) の保持カウントです。これは、それらが決して解放されないことを意味します。

ところで、retainCount を使用しないでください。

于 2011-03-01T14:39:39.933 に答える
6

は決して-retainCount有用なことを教えてくれませんので、絶対に使用しないでください。Foundation および AppKit/UIKit フレームワークの実装は不透明です。何が保持されているのか、なぜ保持されているのか、誰が保持しているのか、いつ保持されたのかなどはわかりません。

以下も参照してください。保持カウントを使用しない理由の優れた詳細については、保持カウントをいつ使用するかを参照してください。

また、Dave DeLong の言葉を借りれば、http://bugreport.apple.com にアクセスし-retainCount、非推奨にするようにリクエストしてください。求める人が多ければ多いほどいい。

于 2011-03-01T15:07:47.090 に答える
4

コードの何が問題になっていますか??

あなたはretainCountを呼び出しています。

retainCountデバッグにはほとんど役に立たず、製品コードでは絶対に使用しないでください。オブジェクトの保持カウントは、しばしば計り知れない値になる内部実装の詳細です。

于 2011-03-01T16:40:38.023 に答える