Je suis "Programmation en Objective-C" 3rd édition et j'ai des problèmes avec le premier exemple.
Je reçois toujours cette erreur:
Problème sémantique: 'NSAutoreleasePool' n'est pas disponible: non disponible en mode de comptage de référence automatique
Voici mon code:
//
// 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;
}
Tout aperçu sera grandement apprécié.
Le compilateur est invité à compiler le fichier avec ARC (comptage automatique des références) activé. Désactivez-le ou, mieux encore, modernisez votre exemple:
int main (int argc, const char * argv[]) {
@autoreleasepool {
NSLog (@"Programming is fun!");
}
return 0;
}
(Non, je ne peux pas vous dire comment, spécifiquement, désactiver ARC, si c'était la route que vous deviez emprunter en raison du NDA susmentionné.)
Publication rapide juste au cas où vous cherchez toujours
Vous pouvez désactiver ARC dans les paramètres de génération.
Dans mon cas, je voulais que ARC soit activé et je voulais mettre à jour un exemple de projet pour qu'il fonctionne correctement. Les documents NSAutoReleasePool d'Apple sont techniquement corrects, mais ne vous expliquez pas tout de suite. Voici comment:
Prenez votre application principale, qui ressemble probablement à ceci:
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([DemoAppDelegate class]));
[pool release];
return retVal;
}
Et changez-le pour ressembler à ceci:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([DemoAppDelegate class]));
}
}
Voici un lien vers le guide de transition d'Apple vers ARC.
OK ... vérifiez this out. Changement spécifique à NSAutoreleasePool - c'est ainsi que Xcode s'initialise lui-même lorsque vous créez votre première application. Je ne sais pas pour vous, mais j'adore cette idée!
Pas de soucis si vous suivez le livre de Kochan. Lors du démarrage de votre projet, décochez simplement la case "Utiliser ARC". Tout fonctionnera.