В вашем коде нет ничего плохого.Вы можете смешивать функции в стиле C в кодах Objective-C.Я не вижу проблем ни с сохранением / выпуском объектов Obj-C, ни с новым / удалением объектов C ++.
Но имя вашей функции нарушает Правило создания .т. е. если имя функции или метода содержит alloc
, create
или copy
, предполагается, что он возвращает объект NSObject
или CF
с счетом сохранения 1. Статический анализатор XCode работает при условии, что этоправить.Вы также работаете с этим правилом.В противном случае сохранение / выпуск будет испорчено.
Попробуйте Построить и проанализировать этот файл.
#import <CoreFoundation/CoreFoundation.h>
extern CFStringRef FooCreate(void);
int main (int argc, const char * argv[]) {
CFStringRef string=FooCreate();
/* CFRelease(string); */
return 0;
}
Вы можете увидеть результат изменений анализатора, если оставите комментарий (101) *.Вам не нужно предоставлять определение FooCreate
.Даже если вы предоставите, текущий анализатор не смотрит на него, а полагается на имя функции.
Ваш код возвращает автоматически высвобождаемую переменную, даже если имя метода содержит create
.Это могло бы сбить с толку анализатор и дать ложный положительный результат.