проблема утечек памяти в приложении iphone - PullRequest
0 голосов
/ 23 апреля 2011

Я получаю утечки по следующему коду.

            cell.lblNoOfReplay.text=[NSString stringWithFormat:@"0 Replies. %@",(NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault, (CFStringRef)[[NSString stringWithFormat:@"Last message on %@",[BabbleVilleAppDelegate dateByAddingHours:Babbleoffset withDate:[[arrayPMMainList objectAtIndex:[indexPath section]] objectForKey:@"datetime"]]] stringByReplacingOccurrencesOfString:@"+" withString:@" "], CFSTR(""), kCFStringEncodingUTF8)];

Здесь я не выделил ни одной строки, но когда я проверяю утечки памяти, в приведенной выше строке есть некоторые утечки. Вероятно, это может быть связано с kCFAllocatorDefault, поэтому кто-то сталкивался с теми же проблемами, помогите мне.

С уважением Mrugen

1 Ответ

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

Да, вы выделили строку.Базовые объекты Foundation следуют правилу Create : любой объект, полученный с помощью функции, имя которой содержит либо Create, либо Copy, принадлежит вызывающей стороне и должен быть освобожден вызывающей стороной, когда он завершит ее использование.

Измените свой код на:

CFStringRef s = CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault, (CFStringRef)[[NSString stringWithFormat:@"Last message on %@",[BabbleVilleAppDelegate dateByAddingHours:Babbleoffset withDate:[[arrayPMMainList objectAtIndex:[indexPath section]] objectForKey:@"datetime"]]] stringByReplacingOccurrencesOfString:@"+" withString:@" "], CFSTR(""), kCFStringEncodingUTF8);
cell.lblNoOfReplay.text=[NSString stringWithFormat:@"0 Replies. %@", (NSString *)s];
CFRelease(s);

Также рассмотрите возможность разбить эту строку на несколько частей и промежуточных переменных.Другие люди, которые увидят этот код, в том числе и ваше будущее, будут вам благодарны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...