释放作为返回值的NSDictionary(或其他NSObject)。

时间:2011-08-01 16:14:39

标签: iphone objective-c xcode cocoa-touch

我们说我有一个这样的方法:

- (NSDictionary*)getBigDictionaryOfSecrets
{

NSDictionary *theDic = [[NSDictionary alloc] init];
theDic = // insert contents of dictionary

return theDic;
}

如何以及在何处正确发布此内容?

5 个答案:

答案 0 :(得分:4)

试试return [theDic autorelease]。这不会立即释放字典,允许调用者retain

答案 1 :(得分:1)

这正是autorelease的用途。做这样的事情:

- (NSDictionary*)bigDictionaryOfSecrets 
{ 
    NSDictionary *theDic = [[NSDictionary alloc] initWithObjectsAndKeys:@"bar", @"foo", nil];

    return [theDic autorelease];
}

详细了解Memory Management Programming Guide中的autorelease

答案 2 :(得分:1)

您要么自动发布,要么将 非常好地 记录为调用方负责释放它。

答案 3 :(得分:0)

在autorelease上设置返回对象应该有效。请记住,接收方必须保留返回的对象。

- (NSDictionary*)getBigDictionaryOfSecrets 
{ 
  NSDictionary *theDic = [[NSDictionary alloc] init];
  theDic = // insert contents of dictionary

  return [theDic autorelease];
}

答案 4 :(得分:0)

除了提供的答案之外,您可以执行以下操作,而不是使用autorelease

- (void)populateBigDictionaryOfSecrets(const NSMutableDictionary*)aDictionary
{
    // insert contents of dictionary
}

在将要使用它的类/方法中创建/释放字典。