2012-05-23 16 views
8

In X-Code, wenn ich ein neues Projekt mit automatischer Referenzzählung (ARC) erzeuge, und ein bestehendes Nicht-ARC-Projekt über Datei -> Dateien hinzufügen hinzufügen (wird berücksichtigt) Hinzufügen zum Arbeitsbereich? Nicht sicher über den Arbeitsbereich Begriff), würde das funktionieren? Also kann der neue Code, den ich in diesem Projekt schreibe, ein ARC-Code sein?Ein Projekt ohne ARC in ein Projekt mit ARC einfügen

Wenn Sie ein Projekt auf diese Weise hinzufügen, werden die Dateien nicht in den "kompilierten Quellen" aufgelistet. daher habe ich nichts "-fno-objc-arc" anzusetzen.

Ich stelle fest, dass MapBox-ios-Beispiel scheint dies zu tun. Fügst du es einfach rein und denkst nicht darüber nach?

Eine separate Frage ist, was passiert, wenn es sich um eine nicht-ARC statische Bibliothek (.a) handelt, die ich mit meinem ARC-Projekt verlinke? Muss ich etwas Besonderes mit den Klassen in der Nicht-ARC-Bibliothek tun?

EDIT: Hallo Entschuldigung für die späte Antwort.

Fast alle von euch antworteten ziemlich gut auf meine zweite Frage, ich danke Ihnen allen dafür. Da Nverinaud der Erste ist, der diese Frage beantwortet, lerne ich, ihm den Kredit zu geben. (Es scheint ein Zeitlimit für die Vergabe der Prämie zu geben? Wenn die Antworten sie sind, würde ich nverinaud den Kredit geben wollen.)

Allerdings habe ich noch Zweifel an meiner ersten Frage. Ich füge eine nicht-ARC- "Projektdatei" selbst in mein aktuelles ARC-Projekt ein, entsprechend den Mapbox-Beispielen und Anweisungen. Ich muss betonen, dass ich die Quelldateien (.m .c) NICHT einzeln in das Projekt einfüge, sondern die Projektdatei hinzufüge. Die .m und .c scheint in einem separaten Projekt in einem separaten Ordner zu sein. Und dieses Mapbox-Projekt hat Aufrufe wie [view release] und ich BENÖTIGE das spezielle Flag -fno-objc-arc nicht, um die Warnungen stummzuschalten, weil die Warnungen nicht vorhanden sind.

Ich verstehe, dass normalerweise, wenn Sie eine Nicht-ARC-Quelldateien in Ihr ARC-Projekt hinzufügen, Sie Compiler-Warnung erhalten, die Sie die Compiler-Stufen nicht passieren lassen wird. Aber in meinem Fall bekomme ich keine. Meine Frage ist insbesondere nicht, wie man die Flagge setzt (was ich weiß), es ist, ob ich die Flagge brauche oder nicht (ich vermute ich nicht, ich könnte sogar Compiler-Warnung haben, wenn ich es einlege? Ich habe es nicht versucht.) Denn ohne die Flagge gibt es keine Warnung. Und ich frage nach einer Erklärung, warum es keine Warnung gab und ob ich die Dinge richtig mache.

Hier ist ein Screenshot. enter image description here. OfflineSpotty ist die ARC-Datei, die ich erstellt habe. MapView.xcodeproj ist das Nicht-ARC-Projekt, das ich hinzugefügt habe. Hoffentlich verdeutlicht das Bild die Dinge ein wenig.

+1

Um Ihre zweite Frage zu beantworten, ist ARC-Code binärkompatibel mit Nicht-ARC-Code, so dass Sie ohne ARC-Code mit ARC-Code (oder umgekehrt) ohne Probleme verwenden können. – zneak

+0

Ich habe das gleiche Problem mit MapBox, wie hast du es gelöst? – Stephanie

+0

Können Sie spezifisch sein, weil ich nicht sicher bin, auf welches Problem Sie sich beziehen. – huggie

Antwort

0

Nach Aussagen unter der Frage: „Wie fügen MapBox ios sdk meinen Projekt? "

Sie können diese Anweisungen folgen eine statische lib von einem Open-Source-Projekt auf Ihr eigenes Projekt gehören: http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/

Eine andere Frage ist, was ist, wenn es sich um eine nicht-ARC statische Bibliothek ist (.a) Ich verlinke zu meinem ARC-Projekt? Muss ich etwas Besonderes mit den Klassen in der Nicht-ARC-Bibliothek tun?

Die statische Bibliothek ist bereits kompiliert, so dass Sie sich keine Gedanken darüber machen müssen.

+0

Es erscheint mir, wenn ich ein Nicht-ARC-Projekt in mein ARC-Projekt einbinde, es mir NICHT erlaubt, eine Aussage wie "Release" in mein eigenes Projekt zu schreiben. Das integrierte Projekt benötigt jedoch kein -fno-objc-arc, da es immer noch ein Nicht-ARC-Objekt ist und kompiliert. – huggie

+0

Was sind Ihre Projekttypen? Ist das ARC one eine iOS App? – nverinaud

+0

Ja, sowohl die ARC One als auch die Nicht-ARC One ist eine iOS App. Das Nicht-ARC-Objekt ist das mappbox-ios-sdk-Projekt von MapBox. – huggie

10

Wenn Sie ein Nicht-ARC in ein Projekt einfügen, das ARC verwendet, müssen Sie das Compiler-Flag -fno-objc-arc für alle Nicht-Arc-Quelldateien festlegen.

Um dies in Xcode zu tun, gehen Sie zu Ihrem aktiven Ziel und wählen Sie die Registerkarte "Build Phases". Wählen Sie nun alle Nicht-ARC-Quelldateien aus, drücken Sie die Eingabetaste, fügen Sie -fno-objc-arc ein und dann "Fertig", um ARC für diese Dateien zu deaktivieren. (leider müssen Sie diese Zeile für jede Datei hinzufügen und es gibt keine Gruppenbearbeitung !:-() . Update: Markieren Sie für die Gruppenbearbeitung einfach die gewünschten Dateien und drücken Sie die Eingabetaste! (Kein Doppelklick) Enter) das ist der Trick :-)

Siehe Screenshot +! a mixture of ARC and non-ARC enabled files

+0

Sie wissen, dass es scheint, als ob ich -fno-objc-arc nicht hinzufügen muss, da es problemlos mit Nicht-ARC-Codes ohne Compiler-Flag kompiliert werden kann. Ich füge keine Nicht-ARC-Quelldateien direkt hinzu. Ich füge die Nicht-ARC-Projektdatei hinzu. – huggie

1

Wenn Sie eine kompilierte Bibliothek zu einem Projekt hinzufügen, dann brauchen Sie nicht um nichts zu kümmern, wird es keine Rolle wenn es ARC ist oder nicht, weil es bereits kompiliert ist und daher der Compiler es nicht kompilieren muss. Ziehen Sie die statische Bibliothek in Ihr Projekt und stellen Sie sicher, dass Sie Ihr Ziel unter dem Add to Targets Abschnitt des Popup auswählen.

Wenn Sie Ihrem Projekt Projektdateien hinzufügen, ziehen Sie den Ordner mit den Dateien in Ihre App. Es wird ein Popup angezeigt und unter "Zu Zielen hinzufügen" stellen Sie sicher, dass das Ziel Ihrer App ausgewählt ist. Wenn Sie dies richtig gemacht haben, werden die Nicht-Arc-Dateien im Abschnitt compile sources der Build-Phasen Ihres Ziels angezeigt. Wie bereits erwähnt, können Sie das Compiler-Flag -fno-objc-arc zu den Nicht-Arc-Dateien hinzufügen. Wählen Sie dazu alle Nicht-Arc-Dateien gleichzeitig aus und drücken Sie die Eingabetaste. Ein Popup wird angezeigt und Sie können darin -fno-objc-arc eingeben und dann Fertig drücken.