2009-05-10 3 views
3

У меня есть следующие функции:Почему Кланг жалуется на все мои автореализованные объекты?

- (NSString *)urlEncodedValue { 
NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(
        kCFAllocatorDefault, 
        (CFStringRef)self, 
        NULL, 
        CFSTR("?=&+/\r\n"), 
        kCFStringEncodingUTF8 
); 

return [result autorelease]; 

} 

Почему Clang дает мне следующие жалобы?

  • 1 вызов функции «» CFURLCreateStringByAddingPercentEscapes возвращает объект ядра Foundation с +1 сохранить счетчик (владеет ссылка)
  • 2 Объект отправлено сообщение -autorelease
  • 3 Объект вернулся к абоненту в качестве ссылки, владеющего (сингл сохранить отсчет передается абоненту)
  • 4 объекта над-autoreleased: объект был послан -autorelease но объект имеет нулевой (локально видимые) сохраняют отсчеты

к Насколько я знаю, это соответствует рекомендациям Apple относительно управления памятью и владения объектами. Должен ли я явно освобождать объект? Эта ошибка возникла 19 раз в моем проекте, причем при подобных обстоятельствах. Что я делаю не так?

+0

Хороший вопрос ... У меня такая же проблема, и я тоже не понимаю, что случилось. Может быть, это ошибка в clang ... –

+0

Может быть, но я считаю, что трудно поверить, поскольку объекты с автореализацией не совсем неясны. Это также происходит, когда я устанавливаю авторекламу с помощью + alloc и -init. – 2009-05-12 22:40:38

ответ

3

Я нашел ответ на свой вопрос, разместив его здесь, если кто-то еще сталкивается с проблемой. Я использовал checker-0.198, checker-0.204 не сообщает о такой проблеме. Кажется, это временная регрессия.