2011-01-10 41 views
0

我有以下方法:问题有关内存使用

+(NSMutableDictionary *)getTime:(float)lat :(float)lon { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init]; 
    [dictionary setObject:hour forKey:@"hour"]; 
    [dictionary setObject:minute forKey:@"minute"]; 
    [dictionary setObject:ampm forKey:@"ampm"]; 

    return dictionary; 
} 

很多方法被砍掉,所以我想我需要在方法的一些其他的东西游泳池。这是我的问题。我知道,我需要释放下列对象:

[dictionary release]; 
[pool release]; 

但是,我不能释放字典才返回它,但只要我回到它不执行该方法的其余部分。我该怎么办?

+0

Objective-C中的方法*除非通过引用返回多个值,否则不会*命名为`get *`。你也不会看到这样的冒号。将你的方法命名为`timeForLatitude:longitude:`。 – bbum 2011-01-10 05:23:32

+0

@bbum谢谢你的风格建议! – 2011-01-10 15:51:41

回答

2

您可以随时autorelease字典,从而确保它至少保存在内存中,直到getTime::返回。这非常符合Cocoa上的内存范例,在该范例中,一个返回它创建(但不拥有)的对象的方法在其不再需要时调用autorelease

当然,请确保在从getTime::收到它的任何代码中保留该字典。