iphone как освободить память в этом случае - PullRequest
2 голосов
/ 23 апреля 2011

У меня есть такой метод

- (NSDictionary *)getCellValuesForRow:(int)row {
NSMutableDictionary *dictValues= [[NSMutableDictionary alloc] init];

Outage *outage = [listOutage objectAtIndex:row];

[dictValues setObject:outage.duration forKey:@"OutageDuration"];
   return dictValues;

}

и это значение сохраняется таким образом

NSDictionary *dict = [[NSDictionary alloc] initWithDictionary:[self getCellValuesForRow:(indexPath.row-1)]];

как освободить память в этом сценарии

Ответы [ 3 ]

2 голосов
/ 23 апреля 2011

Это то, для чего autorelease.

NSMutableDictionary *dictValues= [[[NSMutableDictionary alloc] init] autorelease];
1 голос
/ 23 апреля 2011

Вы должны автоматически высвобождать dictValues ​​в getCellValuesForRow или просто не выделять его. Это будет держать его автоматически выпущенным:

NSMutableDictionary *dictValues= [NSMutableDictionary dictionary];

В большинстве случаев ответственность за то, чтобы вызывать его, должна нести ответственность (если его необходимо сохранить после очистки пула автоматического выпуска), а затем освободить его позже.

Если какие-либо вызовы ему не нужны, они сохраняются, он может просто оставить его автоматически выпущенным.

0 голосов
/ 23 апреля 2011

Альтернативой является просто использовать

NSMutableDictionary *dictValues= [NSMutableDictionary dictionary];

Это фактически то же самое, что предложил Дэн.Просто меньше печатать.

Это относится и к вашей следующей строке:

NSDictionary *dict = [NSDictionary dictionaryWithDictionary:[self getCellValuesForRow:(indexPath.row-1)];
...