/ / Suppress XCode Analyzer Потенциално изтичане на обект, съхраняван в .. грешка [дубликат] - object-c, xcode, analyzer

Потискане на анализатор на XCode Потенциално изтичане на обект, съхраняван в грешка .. [duplicate] - цел-c, xcode, анализатор

Имам метод, който създава връща инстанция на a CoreGraphics обект - CGPathRef.

Когато стартирам приложението чрез Analyzer се оплаква, че този метод изтича ... това е, но е умишлено. Искам да прехвърля собствеността на обаждащия се и да ги оставя да почистват.

Какво мога да направя, за да потисна това анализатор внимание?

- (CGPathRef) createSomePath:(CGPoint)center innerRadius:(CGFloat)innerRadius outerRadius:(CGFloat)outerRadius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle
{
CGMutablePathRef slicePath = CGPathCreateMutable();

....

return slicePath;  <--- Analyzer points to this line as a potential leak.
}

Да приемем, че това трябва да е възможно, тъй като много рамки връщат тези обекти, изискващи повикващия да почисти ...

Благодаря предварително !

Послепис Страхувам се, че този въпрос не е дуп, нито пък има правилен отговор никъде другаде ... трите отговора, подчертани в горната част на тази страница, не са правилни / пълни ... само отговора, предоставен от Матиас Баух, т.е. "Правилото е наистина правилният отговор на въпроса, който повдигнах :) БЛАГОДАРЯ!

Отговори:

9 за отговор № 1

Функциите на CoreFoundation следват „Създаване на правило“, Ако функцията има "Създай" в нея, тя връща обект с референтен брой 1.

За съжаление методът ви не е функция c.

Така че трябва да превърнете вашия метод Objective-C в функция C. Нещо като това:

CGPathRef CreatePath(CGPoint center, CGFloat innerRadius, CGFloat outerRadius, CGFloat startAngle, CGFloat endAngle) {
// your code here
}

Това трябва да удовлетвори анализатора и да работи правилно с ARC.

В метод Objective-C можете да получите подобно поведение, като започнете да подписвате метода си new, alloc, copy или mutableCopy, Стартиране на метода с new вероятно най-добре пасва на вашия случай.
Нещо подобно трябва да се хареса на анализатора, но не съм сигурен дали работи правилно с ARC. Трябва да профилирате това.

- (CGPathRef)newPath:(CGPoint)center innerRadius:(CGFloat)innerRadius outerRadius:(CGFloat)outerRadius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle {
// your code here
}

0 за отговор № 2

Трябва да можете да направите това:

#ifndef __clang_analyzer__
CGMutablePathRef slicePath = CGPathCreateMutable();
#endif

Не мога да кажа, че все пак го препоръчвам!