Основной объект Foundation - потенциальная утечка - PullRequest
1 голос
/ 11 сентября 2011

У меня есть следующее (адаптировано из низкоуровневого управления файлами Apple - разрешение псевдонимов)

NSString *resolvedPath = nil;
...
resolvedPath = (NSString*)CFURLCopyFileSystemPath(resolvedUrl, kCFURLPOSIXPathStyle);
...
return resolvedPath;

Build & Analyze выдает следующее предупреждение: -

194:3 Potential leak (when using garbage collection) of an object allocated on line 187 and stored into 'resolvedPath'

Деталь заявляет: -

187:32 Call to function 'CFURLCopyFileSystemPath' returns a Core Foundation object with a +1 retain count (owning reference).  Core Foundation objects are not automatically garbage collected

194:3 Object returned to caller as an owning reference (single retain count transferred to caller)

194:3 Object allocated on line 187 and stored into 'resolvedPath' and returned from method 'getTarget:' is potentially leaked when using garbage collection.  Callers of this method do not expect a returned object with a +1 retain count since they expect the object to be managed by the garbage collector

Есть ли у меня утечка памяти?

Если так, как я могу это исправить?

Если нет, как я могу предотвратить предупреждения?

Ответы [ 2 ]

1 голос
/ 11 сентября 2011

Это просто предупреждает вас, что созданный объект, который назначен на resolvedPath, возвращается с retain count of 1, поэтому, если ваш метод не начинается с new alloc или contains copy, caller не имеет никакого способа знаю, что он имеет дело с retained объектом, и поэтому никогда не получит released.

Чтобы исправить это, измените имя вашего метода с getTarget на newTarget.

0 голосов
/ 11 сентября 2011

Есть ли у меня утечка памяти?

Вы должны предположить, что это утечка.в GC распределение типа cf не гарантируется для сборщика.GC охватывает только диапазон типов (явные объекты objc).вы должны предполагать, что cf типы, которые вы создаете или копируете, не зарегистрированы в сборщике.возвращается ли вам cftype из функции cf, которая зарегистрирована или не зарегистрирована в сборщике, не раскрывается (это может быть связано с тем, что тип ns является типом cf).

Если да, то как мне это сделать?исправить это?

с использованием CFMakeCollectable или NSMakeCollectable

...