Objective c 释放返回的对象的方法是否正确?
如果我在函数内部创建一个对象并返回它,我应该在何时/何地释放这个对象?下面是一个创建对象的示例Objective c 释放返回的对象的方法是否正确?,objective-c,ios,memory-management,Objective C,Ios,Memory Management,如果我在函数内部创建一个对象并返回它,我应该在何时/何地释放这个对象?下面是一个创建对象的示例 - (NSDictionary*) sampleFunction { NSMutableDictionary* state = [[NSMutableDictionary alloc] initWithCapacity:5]; [state setObject:[[NSNumber alloc] initWithInt:self.a] forKey:@"a"]; [stat
- (NSDictionary*) sampleFunction
{
NSMutableDictionary* state = [[NSMutableDictionary alloc] initWithCapacity:5];
[state setObject:[[NSNumber alloc] initWithInt:self.a] forKey:@"a"];
[state setObject:[[NSNumber alloc] initWithInt:self.b] forKey:@"b"];
[state setObject:[[NSNumber alloc] initWithInt:self.c] forKey:@"c"];
return state;
}
附加问题:为了避免内存泄漏,我是否也应该释放这里分配的NSNumbers?如果没有内存泄漏,这段代码会是什么样子?首先,您应该阅读本指南了解所有规则: …不要把这里的人说的当作福音。我在上面链接的指南将澄清一些例外和奇怪的规则 现在,与您的示例相关:广义地说,每次您
alloc
某些内容时,您都必须释放它。当你从一个方法返回一个值时,它应该是自动释放的(99%的时候。有几个例外:看,没有什么是很容易的!)。苹果为方便起见提供了一些自动发布的方法-NSNumber
有其中之一
我将向您展示上面的代码,但要使用这些自动删除的方法进行重写:
- (NSDictionary*) sampleFunction
{
NSMutableDictionary* state = [NSMutableDictionary dictionaryWithCapacity:5];
[state setObject:[NSNumber numberWithInt:self.a] forKey:@"a"];
[state setObject:[NSNumber numberWithInt:self.b] forKey:@"b"];
[state setObject:[NSNumber numberWithInt:self.c] forKey:@"c"];
return state;
}
正如我提到的,您还可以将autorelease
与alloc/init
一起使用:
NSMutableDictionary* state = [[[NSMutableDictionary alloc] initWithCapacity:5]autorelease];
同样,我上面链接的苹果文档是回答内存管理问题的最佳去处