2013-02-07 9 views
7

Ich modifiziere eine open source app, die nicht-ARC ist. Die meisten meiner iOS-Erfahrung ist mit ARC-fähigen objective-c, also, wenn ich neue Dateien zum Projekt erstellen und hinzufügen, tendiere ich dazu, sie ARC-konform mit compiler flags (vor allem, wenn ich konfrontiert mit seltsamen Nicht-Arc-Code bugs).Wie sicher ist es, ARC- und Nicht-ARC-Code im selben iOS-Projekt zu mischen?

Die Sache, die mich nachts wach hält, ist die Frage: Wie sicher und zuverlässig ist es, Lichtbogen- und Nicht-Lichtbogen-Code in meinem Projekt zu mischen? Wenn QA-Zeit kommt, wird es ein Albtraum sein, auf Dinge wie Speicherlecks und Leistung usw. zu testen? Anders ausgedrückt: Ist es sinnvoll, den bestehenden Nicht-Arc-Code in Arc-Code umzuwandeln und den potenziellen Ärger zu beseitigen?

+0

Das sind Compiler-Flags, keine Linker-Flags. Die Verwendung von ARC befreit Sie auch nicht davon, Ihre App auf Lecks und Leistung zu testen. –

+0

meine schlechte .. feste .. – abbood

Antwort

9

Sie können ohne Probleme frei mischen.

+0

Ja, das ist wirklich die Antwort, die Sie brauchen. Es gibt einen Vorbehalt (etwas über vorkompilierten Code mit schlechten Namenskonventionen, der ARC in eine übermäßige Freigabe bringt), aber ich glaube nicht, dass dies in dieser Situation zutrifft. – borrrden

+0

irr .. nun, ich respektiere beide von Ihnen sehr und ich erkenne beide Ihrer technischen Erfahrung .. Ich hatte auf einige Beweise oder Dokumentation gehofft? oder basieren Ihre Antworten einfach auf persönlicher Erfahrung (was an sich noch genug sein könnte) – abbood

+1

@abbood - ARC ist keine Zauberei, es schaut einfach durch Ihren Code zur Kompilierzeit und fügt die notwendigen Rücklagen und Freigaben hinzu. Der generierte Code unterscheidet sich nicht von dem Code, den Sie selbst geschrieben hätten. Aus der [Umstellung auf ARC-Versionshinweise] (https://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html#//apple_ref/doc/uid/TP40011226): "Sie können ARC auch für einzelne Dateien verwenden, wenn es für Sie einfacher ist, die manuelle Referenzzählung für einige Dateien zu verwenden." – sosborn

0

Ich glaube nicht, es ist sicher, da einige Code verboten ist, wenn ARC auf, wie dieses Verfahren eingeschaltet wird:

- (void)dealloc 
{ 
    [super dealloc]; 
} 

Und natürlich beim Loslassen:

[exampleVariable release]; 

, die vorhanden sein können in den Nicht-ARC-Projekten.

+0

meine Frage geht davon aus, dass alle solche nicht-sicheren Code bereits berücksichtigt wurde (dh herausgenommen) – abbood

+1

Nun, in diesem Fall ist es völlig sicher, da das das einzige ist, was zählt. –

+1

Würde nicht für den Nicht-ARC-Code entfallen im Wesentlichen ARC-Code? – devios1

Verwandte Themen