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回出さなきゃいけないの!? 私は何を誤解しましたか?
どうもありがとう。