ios - 'autorelease ist nicht verfügbar" Fehler und 'ARC verbietet explizite Meldung senden von autorelease' Fehler
Hatte ich ein app, das funktioniert Prima. Und dann habe ich versucht einbetten der navigation-controller in einem tabbarcontroller und nächste, was ich weiß, ich habe immer diesen Fehler beim kompilieren.
Würde jemand wissen, warum dies geschehen? Habe eine Einstellung bekommen, ungeprüft oder geprüft durch Zufall?
Dank,
Alex
InformationsquelleAutor Genadinik | 2013-07-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint Ihr bisher funktionierenden code nicht verwenden, ARC, jetzt versucht Sie Betten es in code verwendet, ARC ... Umgestalten von code mithilfe von "Bearbeiten->Konvertiert->Konvertierung in Objekt-C ARC"
das bedeutet, dass Ihr code ist zu kompliziert für die refactoring-Assistenten, und Sie haben - leider - überarbeiten Sie den code manuell ein 🙁
also, was soll ich tun, um es richtig? Soll ich kommentieren, alle Aussagen mit Fehlern? Oder etwas anderes?
Schauen Sie, wie ARC funktioniert - was im Grunde bedeutet, dass Sie nicht haben, um retain-und release-Objekte selbst, und ist somit viel einfacher 😉 ... aber da der Assistent konnte nicht entfernt werden, der behält, releases, auto-releases, Sie selbst könnten Sie eine Brücke Magie, die Sie vielleicht möchten Sie mit Vorsicht zu handhaben ... Trotzdem haben Sie einen Blick auf, wie ARC funktioniert, sollte es nicht zu schwierig, um in Ihrem code.
Ich bin nicht sicher, ich brauche/will ARC. Um es loszuwerden, muss ich nur kommentieren, das autorelease Teile des Codes?
InformationsquelleAutor Martin Mandl
ARC aktiviert ist, pro übersetzungs-jede kompilierte Quelldatei und alles, was er sieht, über die Aufnahme müssen sich an den ARC-oder MRC. Und ja, die Modi koexistieren können (d.h. Sie können BOGEN für einige Dateien, aber nicht alle und die Bibliotheken, die Sie verknüpfen können entweder).
Haben Sie zwei Modi:
ARC
Den Ausdruck
[obj autorelease]
ist verboten. ARC wird es für Sie (es sei denn, Sie haben ungewöhnlich "reference counting" - Sequenzen).Unter typischen Szenarien, können Sie einfach schreiben:
und dann die ARC wird das
autorelease
für Sie.Aber wenn Sie schreiben:
in der ARC, wird es einen compile-Fehler (wie in deinem Titel).
MRC
- Und dies ist die MRC-form:
Ihrem Projekt verwendet wahrscheinlich ARC standardmäßig (d.h. es wird definiert, xcconfig, die auf Projektebene, bzw. auf dem angestrebten Niveau), obwohl Sie Hinzugefügt haben, eine source-Datei, die geschrieben wurde, für MRC.
Da die Datei entweder als kompiliert ARC, können Sie entweder entfernen Sie die
autorelease
Nachricht oder deaktivieren ARC für die einzelne Datei.Wenn diese Quelle die Datei noch von einem anderen Projekt verwendet, sollten Sie es kompilieren mit ARC deaktiviert (weil 'Sie' kompilieren Sie es ohne BOGEN, Sie würde zu Problemen führen, durch das entfernen der ref-count-ops, von dem Sie abhängen). Wenn die Datei nicht in anderen Projekten verwendet, dann gehen Sie voran und löschen Sie es (wenn die migration fehlschlägt). Obwohl Sie sehr selten sind, halten Sie ein Auge für ungewöhnliche Referenz-count-Operationen.
InformationsquelleAutor justin
Werden die Fehler auf den neuen code?
In diesem Fall ich denke, dein Vorhaben ist ARC-fähig ist und wenn man versucht zum einbetten der
UINavigationController
Sie eingefügt haben, einige non-ARC code.Habt Ihr den compiler?
LLVM-compiler stellt ARC. Wenn Sie die Entwicklung einer non-ARC-Projekt, vielleicht haben Sie gerade kompiliert mit LLVM und das brach Ihr code.
Versuchen refactoring der code. Überprüfen Sie diese.
Versuchen Sie es deaktiviert ARC. Überprüfen Sie diese Antwort: stackoverflow.com/questions/7837024/...
InformationsquelleAutor Edu