Wie kann ich ARC für eine einzelne Datei in einem Projekt deaktivieren?

1342

Ich verwende ARC erfolgreich in meinem Projekt. Ich bin jedoch auf einige Dateien gestoßen (z. B. in Unit-Tests und Scheinobjekten), in denen die Regeln von ARC derzeit etwas fragiler sind. Ich erinnere mich, dass es eine Möglichkeit gab, ARC pro Datei zu deaktivieren, obwohl ich diese Option nicht finden konnte.

Ist das möglich? Wie deaktiviere ich ARC pro Datei?

casademora
quelle

Antworten:

2168

Sie können ARC für einzelne Dateien deaktivieren, indem Sie das -fno-objc-arcCompiler-Flag für diese Dateien hinzufügen .

Sie fügen Compiler-Flags unter Ziele -> Phasen erstellen -> Quellen kompilieren hinzu. Sie müssen auf die rechte Spalte der Zeile unter Compiler-Flags doppelklicken . Sie können es auch mehreren Dateien hinzufügen, indem Sie die cmd-Taste gedrückt halten, um die Dateien auszuwählen, und dann die Eingabetaste drücken, um das Flag-Bearbeitungsfeld aufzurufen. (Beachten Sie, dass beim Bearbeiten mehrerer Dateien möglicherweise bereits vorhandene Flags überschrieben werden.)

Ich habe ein Beispielprojekt mit einem Beispiel erstellt: https://github.com/jaminguy/NoArc

xcode

Weitere Informationen finden Sie in dieser Antwort: Deaktivieren Sie die automatische Referenzzählung für einige Dateien

Jaminguy
quelle
58
Der Ort, an dem diese Flagge hinzugefügt werden kann, ist also nicht zu intuitiv. In Xcode 4, in Erstellungsphasen und beim Kompilieren von Quellen gibt es jedoch tatsächlich zwei Spalten. Eine für den Dateinamen und eine für die Kompilierungsflags für diese eine Datei. Hier geben Sie dieses spezielle Compiler-Flag ein.
Casademora
3
Können Sie für ein Verzeichnis angeben, dh für alle Dateien in einem Verzeichnis? Was ist mit einer Gruppe?
ma11hew28
4
Keine Verzeichnisse.
Jeweils
13
@casademora Sie können nicht genug Upvotes für diese Information bekommen. Vielen Dank.
TheTRON
26
@casademora Sie können mehrere Dateien gleichzeitig auswählen - aber dann nicht doppelklicken, sondern RETURN drücken. Fügen -fno-objc-arcSie dann einfach das hinzu und es wird allen ausgewählten Dateien hinzugefügt. edit sah gerade die Antwort unter dieser :(
pkyeck
460

Deaktivieren Sie ARC für MEHRERE Dateien:

  1. Wählen Sie die gewünschten Dateien unter Ziel / Phasen erstellen / Quellen kompilieren in Xcode aus
  2. DRÜCKEN SIE ENTER
  3. Typ -fno-objc-Bogen
  4. Drücken Sie die Eingabetaste oder Fertig

;)

Geben Sie hier die Bildbeschreibung ein

Tibidabo
quelle
2
Danke! Ich habe lange nach dieser Funktion gesucht. Ein Doppelklick funktioniert nicht, wenn mehrere Zeilen ausgewählt sind, die Eingabetaste jedoch. So seltsam.
Bobmoff
4
Oh wow. Ich würde mein ganzes Karma ausgeben, um dies wieder zu verbessern. Danke für das Teilen!
Jemmons
Dies scheint unter Xcode 4.3.3 nicht mehr zu funktionieren. Doppelklicken Sie auf die ausgewählten Dateien oder drücken Sie die Eingabetaste. Der Dialog zum Einfügen des Flags -fno-ojbc-arc wird nicht angezeigt. Hat jemand eine Problemumgehung dafür?
Tom
Ich hatte 4.3.3 und jetzt 4.4 DP7 und es funktioniert immer noch gut. Starten Sie Xcode neu, starten Sie den Computer neu und reparieren Sie die Berechtigungen.
Tibidabo
44

Für Xcode 4.3 ist der einfachere Weg möglicherweise: Bearbeiten / Refaktorieren / In Ziel-C-ARC konvertieren und dann die Dateien abhaken, die nicht konvertiert werden sollen. Ich finde das genauso wie oben mit dem Compiler-Flag.

Jingjie Zhan
quelle
36

Es ist sehr einfach, einzelne Dateien nicht bogenförmig zu machen.

Befolgen Sie die folgenden Schritte:

Deaktivieren Sie ARC für einzelne Dateien:

  1. Wählen Sie die gewünschten Dateien unter Ziel / Phasen erstellen / Quellen kompilieren in Xcode aus

  2. Wählen Sie die .m-Datei aus, die Sie erstellen möchten. NON-ARC PRESS ENTER Geben Sie -fno-objc-arc ein

Nicht-ARC-Datei zum ARC-Projektflag: -fno-objc-arc

ARC-Datei in Nicht-ARC-Projektflag: -fobjc-arc

Dipak Narigara
quelle
35

Hinweis: Wenn Sie ARC für viele Dateien deaktivieren möchten , müssen Sie:

  1. Öffnen Sie "Build-Phasen" -> "Quellen kompilieren"
  2. Wählen Sie Dateien mit "left_mouse" + "cmd" (für getrennte Dateien) oder + "shift" (für gruppierte Dateien - wählen Sie zuerst und zuletzt aus) aus.
  3. Drücken Sie Enter"
  4. Einfügen -fno-objc-arc
  5. Drücken Sie erneut die Eingabetaste
  6. profitieren!
Digipeople
quelle
22

Verwenden Sie einfach die -fno-objc-arcFlagge in Build Phases>Compile Sources

Rahul Gupta
quelle
13
  1. Wählen Sie Xcode-Projekt
  2. Gehe zu Zielen
  3. Wählen Sie den Abschnitt Build-Phasen
  4. Wählen Sie im Abschnitt Build-Phasen die Kompilierungsquellen aus.
  5. Wählen Sie die Datei aus, für die Sie ARC nicht deaktivieren möchten, und fügen Sie -fno-objc-arc hinzu

Deaktivieren Sie ARC für eine bestimmte Datei

user2538944
quelle
13

Es ist möglich, ARC (Automatic Reference Counting) für eine bestimmte Datei in Xcode zu deaktivieren.

Wählen Sie Ziel -> Phasen erstellen -> Quellen kompilieren -> Datei auswählen (Doppelklick) -> Fügen Sie dem Popup-Fenster "-fno-objc-arc" hinzu.

Ich hatte diese Situation bei der Verwendung von "Erreichbarkeits" -Dateien festgestellt.

Dies ist in der folgenden Abbildung dargestellt:

Geben Sie hier die Bildbeschreibung ein

Jayprakash Dubey
quelle
11

Verwenden Sie -fno-objc-arc für jede Datei in Erstellungsphasen

Amit Agrawal
quelle
11

Die vier obligatorischen Schritte, wie in diesem Video erläutert

    //1. Select desired files
    //2. Target/Build Phases/Compile Sources
    //3. Type -fno-objc-arc
    //4. Done
user2554822
quelle
8

Bitte folgen Sie einfach dem Screenshot und geben Sie -fno-objc-arc ein .

Geben Sie hier die Bildbeschreibung ein

Tunvir Rahman Tusher
quelle
6

Wenn Sie Unity verwenden, müssen Sie dies in Xcode nicht ändern. Sie können ein Kompilierungsflag in den Metadaten für die spezifischen Dateien direkt in Unity anwenden. Wählen Sie sie einfach im Projektfenster aus und wenden Sie sie im Inspektorfenster an. Dies ist wichtig, wenn Sie Cloud Build verwenden möchten.Geben Sie hier die Bildbeschreibung ein

Grönland
quelle
5

Fügen Sie das Flag "-fno-objc-arc" hinzu.

Befolgen Sie einfach die folgenden Schritte: App> Ziele> Phasen erstellen> Quellen kompilieren> Flag nach Klasse "-fno-objc-arc hinzufügen"

Manoj Chandel
quelle
5

Ich denke, alle anderen Antworten erklären, wie man MRC (Manual Reference Count) deaktiviert und ARC (Automatic Reference Count) aktiviert. So verwenden Sie MRC (Manual Reference Count), dh Deaktivieren von ARC (Automatic Reference Count) für MEHRERE Dateien:

  1. Wählen Sie die gewünschten Dateien unter Ziel / Phasen erstellen / Quellen kompilieren in Xcode aus
  2. DRÜCKEN SIE ENTER
  3. Geben Sie -fobjc-arc ein
  4. Drücken Sie die Eingabetaste oder Fertig
Vin
quelle
2

Verwenden Sie einfach das Flag -fno-objc-arc unter Build-Phasen> Quellen kompilieren vor Dateien, auf die ARC nicht angewendet werden soll.

C_compnay
quelle
-1
  1. Wählen Sie Projekt -> Ziele -> Erstellungsphasen -> Compilerquellen
  2. Wählen Sie Datei -> Compiler-Flags
  3. füge -fno-objc-arc hinzu
Mnsd
quelle
-2

Gehen Sie zu App -> dann Ziele -> Phasen erstellen -> Quelle kompilieren

Wählen Sie nun die Datei aus, in der Sie ARC deaktivieren möchten

Fügen Sie dieses Snippet "-fno-objc-arc" ein. Drücken Sie nach dem Einfügen die EINGABETASTE

in jeder Datei, in der Sie ARC deaktivieren möchten.

adijazz91
quelle
5
Ihre Antwort enthält keine Ergänzung zu dieser alten Frage.
Vikingosegundo
-2

Befolgen Sie den folgenden Schritt, um die Deaktivierung von ARC zu aktivieren

Xcode-Projekt auswählen Zu Zielen wechseln Wählen Sie den Abschnitt Build-Phasen aus. Wählen Sie im Abschnitt Build-Phasen die Kompilierungsquellen aus. Wählen Sie die Datei aus, für die Sie ARC nicht deaktivieren möchten, und fügen Sie -fno-objc-arc hinzu

annu
quelle
1
Ihre Antwort enthält keine Ergänzung zu dieser alten Frage.
Jomafer
Welchen Zusatz brauchen. Wenn Sie es besser wissen, als uns zur Verfügung zu stellen.
Annu
Ich habe dich nicht abgelehnt. Es ist nur diese Frage wurde am 11. Juli 11 um 5:21 gestellt. Es gibt zu viele Antworten mit der gleichen Antwort, die keine nützlichen Informationen hinzufügen ... Ich vermute, dass jemand Sie aus diesem Grund
abgelehnt hat
Kannst du mir einen kurzen Überblick geben?
Annu