我以为我开始在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?我必须发布两次吗?!我误解了什么?
非常感谢。
答案 0 :(得分:2)
您根本不需要发布它。实际上,你一定不能发布它。你不拥有它。这些保留来自Cocoa,Cocoa有责任照顾它 - 它们不是你的顾虑。 (这是为什么看retainCount
是不可取的原因之一。)