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];
同样,我上面链接的苹果文档是回答内存管理问题的最佳去处