Ich schaue mir den Beispielcode für die Square Cam in Apples an Beispielcode . Ich möchte einige Funktionen in einem modernen Projekt mit ARC replizieren. Es gibt jedoch eine Menge von Require-Anweisungen wie:
%Vor%Was den Compilerfehler erzeugt:
Gehe in den geschützten Bereich.
Meine Frage ist - was ist der geeignete Weg, um solche Anweisungen in einem Projekt mit ARC zu behandeln?
Ich hatte das gleiche Problem (mit dem gleichen Beispielcode). Der Code sah so aus:
%Vor%Ich habe Klammern um den Block mit den Deklarationen hinzugefügt, um deren Gültigkeitsbereich zu verdeutlichen:
%Vor%Und es hat das Problem für mich gelöst. Wenn ich mir das anschaue, habe ich auch gelernt, dass man Buildfehler manchmal erweitern kann, um mehr Details zu erhalten.
Anscheinend liegt bail
in einem Bereich mit einer oder mehreren __block
Variablen; Das ist nicht erlaubt. Weitere Informationen finden Sie Ссылка . Die vorgeschlagene Lösung besteht darin, den Umfang der Variablen __block
zu begrenzen, indem sie in durch Trennzeichen getrennte Blöcke gesetzt werden. Dies funktioniert möglicherweise nicht immer. YMMV.
Ich füge eine Beschreibung für die @ Lewis42-Antwort hinzu.
Wenn Sie die Variable nicht in ihren eigenen Geltungsbereich setzen, umgehen Sie die Initialisierung aller Variablen nach dem Goto-Befehl, und wenn ARC versucht, sie zu bereinigen, wird am Ende versucht, ein zufälliges Stück Speicher freizugeben.
>Wenn Sie Variablen nicht in ihren eigenen Geltungsbereich setzen möchten, stellen Sie sicher, dass keine Variable unter goto keyword deklariert werden sollte.
Springt in den Bereich der Variablen __block
__ block erfordert spezielle Runtime-Initialisierung. Ein Sprung in den Gültigkeitsbereich einer __block-Variablen umgeht diese Initialisierung und lässt die Metadaten der Variablen in einem ungültigen Zustand.
Tags und Links objective-c llvm ios automatic-ref-counting