2012-08-28 10 views
5

He rediseñado un proyecto para ARC. Se ve bien, pero hay un objeto que usa el centro de notificaciones. Eliminé al observador en un método de destratamiento personalizado. Eso funcionó bien en el proyecto no ARC. También funciona en ARC, pero recibo una advertencia loca: "Método posiblemente sin una llamada [super dealloc]". En un proyecto de ARC, automáticamente se hace para mí cuando el método finaliza. Mejor aún: ¡no debo llamarlo en proyectos ARC! Esto debe ser un error de XCode, ¿verdad? Aquí está mi código:"Falta [super dealloc]" advertencia en un proyecto de ARC

- (void)dealloc { 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    // [super dealloc]; will be called automatically 
} 

Siempre quiero escribir un código que no arroje advertencias. ¿Hay una forma de evitar ese signo de exclamación amarillo?

+0

No debe haber ningún tipo de advertencia, como se sospechaba. ¿Seguro que apagaste el ARC correctamente? – DrummerB

+0

¡Active ARC! Utilicé el menú Editar/Refactorizar/Convertir a Objective-C ARC ... –

+5

Asegúrate de que el archivo de implementación específico no se crea sin la compatibilidad con ARC - comprueba Build-Fhases-> Compile Sources para eso. – Till

Respuesta

10

Poner las siguientes líneas en su método de dealloc para asegurarse de que se compila con ARC habilitados:

#if ! __has_feature(objc_arc) 
#error "ARC is off" 
#endif 

Si obtiene el error del compilador en la construcción, usted puede estar seguro de que está apagado ARC y tienen que buscar por la razón. Probablemente esté en configuraciones de compilación por archivo en tu objetivo.

+0

OK, aquí está la respuesta a ese acertijo: El proyecto tiene dos objetivos y la refactorización solo cambió el indicador "Conteo automático de referencias de Objective C" en la configuración de compilación de un objetivo a YES. Entonces el otro lanzó esa advertencia. Lo cambié a SÍ solo, y ahora funciona. ¡Gracias, muchachos! –

+1

También descubrí que si activa ARC para el proyecto mientras mira el objetivo, el objetivo seguirá siendo NO. Debe habilitar ARC para cada objetivo individualmente que aparezca. –

0

"¿Has probado apagar y encender nuevamente?"

Ésta es una respuesta tonta, pero limpiar el objetivo y reiniciar Xcode ha resuelto este comportamiento muy irritante para mí

  • Menú> Producto> Limpio
  • Menú> Producto> (pulse la tecla alt) carpeta del proyecto Clean
  • reinicio Xcode

Después de eso, recibí más advertencias relacionadas con ARC, así que, claramente, Xcode no terminó de convertirse a ARC. Ahora la advertencia se ha ido y todo funciona bien.

1

lo hice resolvieron esta advertencia siguientes pasos:

  1. clic en Destino (<yourapp>.xcodeproj) en el que el archivo (<classname>.m) Clase de muestra por encima de la advertencia
  2. Seleccionar OBJETIVO >>Fases Construir >>fuentes de compilación
  3. archivo Búsqueda
  4. Añadir opciones del compilador-fobjc-arc

Ésta es parece a continuación

enter image description here

Cuestiones relacionadas