/ / Suprimir XCode Analyzer Posible pérdida de un objeto almacenado en un ... error [duplicado] - objectivo-c, xcode, analizador

Suprimir XCode Analyzer Posible pérdida de un objeto almacenado en un .. error [duplicado] - object-c, xcode, analyzer

Tengo un método que crea y devuelve una instancia de un CoreGraphics objeto CGPathRef.

Cuando ejecuto la aplicación a través de Analyzer, se queja de que este método tiene fugas ... lo es, pero es deliberado. Quiero transferir la propiedad a la persona que llama y dejar que limpien.

¿Qué puedo hacer para suprimir esto? Analizador ¿advertencia?

- (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.
}

Suponga que esto debería ser posible ya que muchos marcos de trabajo devuelven estos objetos que requieren que el llamador limpie ...

Gracias por adelantado !

PD Me temo que esta pregunta no es un engaño ni tampoco tiene una respuesta adecuada en ningún otro lugar ... las 3 respuestas resaltadas en la parte superior de esta página no son adecuadas / completas ... solo la respuesta proporcionada aquí por Matthias Bauch, es decir, "nuevo "la regla es realmente la respuesta correcta a la pregunta que formulé :) ¡GRACIAS!

Respuestas

9 para la respuesta № 1

Las funciones de CoreFoundation siguen el "crear regla". Si la función tiene un "Crear", devuelve un objeto con un recuento de referencia de 1.

Desafortunadamente su método no es una función c

Así que debes convertir tu método Objective-C en una función C. Algo como esto:

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

Esto debería complacer al analizador y funcionar correctamente con ARC.

En un método Objective-C, puede obtener un comportamiento similar iniciando su firma de método con new, alloc, copy o mutableCopy. Comenzando el método con new probablemente se adapte mejor a su caso.
Algo así debería complacer al analizador, pero no estoy seguro de si funciona correctamente con ARC. Tienes que perfilar esto.

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

0 para la respuesta № 2

Deberías poder hacer esto:

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

¡No puedo decir que lo recomiendo!