objective-c nsautoreleasepool

objective c - NSAutoreleasePool no está disponible



objective-c (5)

ARC se habilita cuando crea un nuevo proyecto por primera vez. Lo cierto es que la única forma en que sé habilitarlo o no habilitarlo es cuando creas tu programa por primera vez. Es una de las casillas de verificación que debes deseleccionar.

Estoy siguiendo la edición de "Programación en Objective-C" y estoy teniendo problemas con el primer ejemplo.

Sigo recibiendo este error:

Problema semántico: ''NSAutoreleasePool'' no está disponible: no está disponible en el modo de conteo automático de referencia

Aquí está mi código:

// // main.m // prog1 // // Created by Steve Kochan on 1/30/11. // Copyright 2011 ClassroomM, Inc.. All rights reserved. // #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog (@"Programming is fun!"); [pool drain]; return 0; }

Cualquier observación será muy apreciada.


Aquí hay un link a la guía de transición de Apple a ARC.

OK ... mira this Cambio específico en NSAutoreleasePool: así se inicia Xcode cuando crea su primera aplicación. No sé de ti, pero me encanta esta idea!

No te preocupes si estás siguiendo el libro de Kochan. Al iniciar su proyecto, simplemente desmarque la casilla "Usar ARC". Todo funcionará.


En mi caso, quería ARC activado, y quería actualizar un proyecto de muestra para que funcione correctamente. Los documentos de NSAutoReleasePool de Apple son técnicamente correctos, pero no lo explique directamente. Así es cómo:

Tome su aplicación principal, que probablemente se ve algo como esto:

int main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; int retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([DemoAppDelegate class])); [pool release]; return retVal; }

Y cambiarlo para que se vea así:

int main(int argc, char *argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([DemoAppDelegate class])); } }


Publicación rápida por si acaso sigues buscando.

Puede deshabilitar ARC en la configuración de compilación.

  • Haz click en tu proyecto, en el organizador de la izquierda.
  • Seleccione su objetivo, en la siguiente columna sobre.
  • Seleccione la pestaña Configuración de compilación en la parte superior.
  • Desplácese hacia abajo hasta "Objective-C Automatic Reference Counting" (puede aparecer como "CLANG_ENABLE_OBJC_ARC" en el grupo de configuraciones definidas por el usuario ), (si no encuentra la opción ARC en la configuración de compilación, es posible que tenga que cambiar su compilador. puede encontrarlo en la configuración de construcción)
  • y ponlo en NO.

Se le pide al compilador que compile el archivo con ARC (conteo automático de referencias) habilitado. Apaga eso o, mejor aún, moderniza tu ejemplo:

int main (int argc, const char * argv[]) { @autoreleasepool { NSLog (@"Programming is fun!"); } return 0; }

(No, no puedo decirle cómo, específicamente, desactivar el ARC, si esa era la ruta que tenía que tomar debido a la NDA mencionada anteriormente).