ios - 'autorelease est pas disponible' des erreurs et "ARC interdit message explicite envoyer de autorelease' erreurs
J'avais une application qui fonctionnait très bien. Et puis j'ai essayé d'intégrer la manette de navigation dans un tabbarcontroller et la prochaine chose que je sais que j'ai commencé à avoir ces erreurs lors de la compilation.
Serait ce que quelqu'un sait pourquoi ça? A certains paramètres obtenir désactivée ou activée par accident?
Grâce,
Alex
OriginalL'auteur Genadinik | 2013-07-01
Vous devez vous connecter pour publier un commentaire.
Semble que votre ancien code n'a pas l'utilisation de l'ARC, maintenant vous avez essayé de l'intégrer dans le code qui utilise l'ARC ... Refactoriser votre code à l'aide de "Edit->Convertir->Convertir en Objet-C ARC"
ce qui signifie que votre code est compliqué pour le refactoring de l'assistant et vous ont - malheureusement - de refactoriser le code manuellement 🙁
alors que dois-je faire pour le mettre droit? Dois-je commenter tous les états avec des erreurs? Ou quelque chose d'autre?
Regardez la façon dont l'ARC est de travail, ce qui signifie que vous n'avez pas à retenir et libérer des objets vous-même et est donc beaucoup plus simple 😉 ... mais parce que l'assistant n'a pas pu supprimer la conserve, des communiqués, des auto-rejets, lui-même, il pourrait être l'utilisation de certains pont de la magie, où vous pourriez vouloir manipuler avec précaution ... et Pourtant, jetez un oeil à la façon dont l'ARC fonctionne, il ne devrait pas être difficile à intégrer dans votre code.
Je ne suis pas sûr que j'ai besoin/envie d'ARC. Pour se débarrasser de lui, dois-je simplement en commentaire l'autorelease parties du code?
OriginalL'auteur Martin Mandl
ARC est activé par la traduction -- chaque compilé le fichier source et tout ce qu'il voit par l'inclusion doivent respecter l'ARC ou de la MRC. Et oui, les modes peuvent coexister (c'est à dire que vous pouvez avoir à l'ARC sur certains fichiers, mais pas de tous, et les bibliothèques que vous établissez un lien peut utiliser).
Vous disposez de deux modes:
ARC
L'expression
[obj autorelease]
est interdit. ARC de l'ajouter pour vous (sauf si vous avez inhabituelle de comptage de référence séquences).Sous les scénarios typiques, vous pouvez simplement écrire:
et puis l'ARC va ajouter de la
autorelease
pour vous.Mais si vous écrivez:
en ARC, ce sera une erreur de compilation (comme dans le titre).
MRC
Et c'est la MRC de la forme:
Votre projet utilise probablement ARC par défaut (c'est à dire qu'elle est définie dans un xcconfig, au niveau du projet, ou au niveau de la cible), si vous avez ajouté un fichier source qui a été écrit pour la MRC.
Puisque le fichier est compilé comme un ARC, vous pouvez soit supprimer le
autorelease
message ou désactiver l'ARC pour le seul fichier.Si ce fichier source est encore utilisé par un autre projet, vous devez le compiler avec l'ARC désactivé (car " ils " le compiler sans ARC, vous créer des problèmes en supprimant la ref nombre ops dont ils dépendent). Si le fichier n'est pas utilisé dans d'autres projets, puis aller de l'avant et de le supprimer (si échec de la migration). Bien qu'ils soient très rares, gardez un œil inhabituelle de comptage de référence des opérations.
OriginalL'auteur justin
Les erreurs sont sur le nouveau code?
Dans ce cas, je pense que vos projets est l'ARC-activé et que vous avez essayé d'intégrer la
UINavigationController
vous avez inséré une certaine non-code ARC.Avez-vous changé le compilateur?
Compilateur LLVM introduit à l'ARC. Si vous développez un non-ARC de projet, peut-être vous juste compilé avec LLVM et qui a brisé le code.
Essayer de refactoring du code. Cochez cette.
Essayez de désactiver l'ARC. Cochez cette réponse: stackoverflow.com/questions/7837024/...
OriginalL'auteur Edu