目标C:发布清单会导致潜在的泄漏吗?

时间:2011-11-17 00:55:28

标签: objective-c memory-leaks release nsdictionary release-management

尝试在网上找到答案,但不能。所以我想知道是否有其他人知道以及为什么?

假设我有NSDictionaryNSArray,用于存储对象内部的对象。如果我发布NSDictionary,是否存在潜在的泄漏,因为我没有释放NSDictionary列表中的对象?

例如:

NSDictionary *dict = [NSDictionary alloc] init];
// Create a bunch of objects, NSStrings, etc.
// Store it into dict.
[dict release];

这还会释放dict中的所有内容吗? (对象,nsstrings等)。
在此先感谢大家!

2 个答案:

答案 0 :(得分:1)

NSDictionaryNSArray中的所有项目在删除时或在列表被销毁时添加和释放时会自动保留。

例如:

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];

MyObject *obj = [[MyObject alloc] init];
[dict setObject:obj forKey:@"foo"];  // the dictionary retains "obj"
[obj release];  // this matches the "alloc/init"
                // but "obj" still is retained by the dictionary

[dict release];  // now "obj" gets released

答案 1 :(得分:1)

当你在NSDictionary或NSArray上发布时,只要数组中对象的保留计数为1(意味着只要你在数据结构中插入对象后释放它们),那么一旦你释放字典或数组,这些对象也将被释放。