我们说我有一个这样的方法:
- (NSDictionary*)getBigDictionaryOfSecrets
{
NSDictionary *theDic = [[NSDictionary alloc] init];
theDic = // insert contents of dictionary
return theDic;
}
如何以及在何处正确发布此内容?
答案 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
}
在将要使用它的类/方法中创建/释放字典。