2012-09-24 11 views
6

Estoy tratando con una base de código donde los estándares de nomenclatura se han ignorado de forma rutinaria. Entonces, hay métodos en algunas clases que devuelven objetos con recuentos de referencia de 1 aunque el nombre del método no se ajuste a NARC. Cosas fantásticasMigrar a Arc con estándares de nomenclatura pobres

Me gustaría convertir el proyecto para utilizar el conteo automático de referencias, pero estoy un poco nervioso debido al hecho de que los estándares de nombres NARC han sido ignorados por completo. ¿Alguien sabe si ARC confía en los estándares de nomenclatura NARC para funcionar correctamente?

Gracias,

Sean

Respuesta

8

ARC no se basan en las convenciones de nomenclatura para que funcione correctamente. Sin embargo ...

Si solo usó objetos ObjC, entonces típicamente "funcionará" siempre y cuando tenga código ARC. Por ejemplo, si usted tenía un método como:

- (id)something { 
    return [[Something alloc] init]; 
} 

Esto está mal (en código no ARC), pero ARC equilibrará a cabo mediante la adición de un extra de manera efectiva autorelease. De hecho, lo anterior es correcto código de ARC, por lo que está bien.

Mi sugerencia, si esto es casi todo el código ObjC, es auto-convertir a ARC y luego ejecutar el analizador estático. El problema puede ser mucho más pequeño de lo que teme si es un código bastante simple que tiene un mal nombre.

Si se trata de un código de puente gratuito de Core Foundation, las cosas son un poco más complicadas. Entonces recomiendo ejecutar el analizador estático primero y obtener su nombre justo antes de convertir. Afortunadamente, nombrar convenciones es algo en lo que el analizador estático es muy bueno.

+0

Gracias Rob. Voy a convertir toda la base de código a arco (aparte de algunas librerías externas como Reachability, JSONKit) – seanoshea

3

Tuve que convertir varios proyectos a ARC y hasta ahora nunca he tenido problemas directamente debido a convenciones de nomenclatura de ningún tipo.

En realidad, la conversión es muy sencilla, así que aunque entiendo completamente su estado de ánimo con respecto al código con el que debe lidiar, realmente no me preocuparía demasiado.

Hasta ahora, nunca he encontrado ninguna situación seriamente difícil durante la conversión, siempre y cuando el código que se convertirá fue correcto en primer lugar y de alguna manera claro de entender.

De hecho, el uso de ARC me parece tan libre de problemas como cualquier otro lenguaje con GC integrado, ¡por supuesto sobre problemas de memoria!

En el peor de los casos, siempre se puede ejecutar el analizador estático, pero incluso eso rara vez se requiere hoy en día con ARC.

Probablemente la situación más crítica se discute aquí: What kind of leaks does automatic reference counting in Objective-C not prevent or minimize?

+0

Gracias user387184. – seanoshea

Cuestiones relacionadas