2011-01-10 42 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::收到它的任何代碼中保留該字典。