0

Objective-C でのメモリ管理のコツをつかみ始めたと思っていましたが、セットを一緒に追加することで得られる保持カウントに少し混乱しています。setByAddingObjectsFromSet の API は次のように述べています。

Returns a new set formed by adding the objects in a given set to the receiving set.

- (NSSet *)setByAddingObjectsFromSet:(NSSet *)other

だから私はこれに少し困惑しています:

NSSet* tom = [[NSMutableSet alloc] initWithCapacity:1];
NSSet* dick = [[NSMutableSet alloc] initWithCapacity:1];
NSSet* harry = [tom setByAddingObjectsFromSet:dick];

printf("tom   retainCount: %d \n", [tom retainCount]);
printf("dick  retainCount: %d \n", [dick retainCount]);
printf("harry retainCount: %d \n", [harry retainCount]);

生成するもの:

tom   retainCount: 1 
dick  retainCount: 1 
harry retainCount: 2 

setByAddingObjectsFromSet が新しいセットを返す場合、retainCount が 2 なのはなぜですか? 2回出さなきゃいけないの!? 私は何を誤解しましたか?

どうもありがとう。

4

1 に答える 1

2

解放する必要はまったくありません。実際には、それを解放してはなりません。あなたはそれを所有していません。それらの保持は Cocoa からのものであり、それを処理するのは Cocoa の責任です。それらはあなたの関心事ではありません。(これは、見ることが推奨されない多くの理由の 1 つですretainCount。)

于 2011-05-12T19:21:14.247 に答える