NSSet setByAddingObjectsFromSet保留计数

时间:2011-05-12 19:12:57

标签: objective-c memory-management nsset

我以为我开始在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?我必须发布两次吗?!我误解了什么?

非常感谢。

1 个答案:

答案 0 :(得分:2)

您根本不需要发布它。实际上,你一定不能发布它。你不拥有它。这些保留来自Cocoa,Cocoa有责任照顾它 - 它们不是你的顾虑。 (这是为什么看retainCount是不可取的原因之一。)