2012-09-24 3 views
6

Ich habe es mit einer Codebasis zu tun, wo Benennungsstandards routinemäßig ignoriert wurden. Daher gibt es in einigen Klassen Methoden, die Objekte mit einer Referenzanzahl von 1 zurückgeben, obwohl der Methodenname nicht NARC entspricht. Fantastisches Zeug.Migrieren zu Arc mit schlechten Benennungsstandards

Ich möchte das Projekt konvertieren, um automatische Referenzzählung zu verwenden, aber ich bin ein wenig nervös aufgrund der Tatsache, dass NARC-Benennungsstandards insgesamt ignoriert wurden. Weiß jemand, ob sich ARC auf die NARC-Benennungsstandards verlässt, um ordnungsgemäß zu funktionieren?

Danke,

Sean

Antwort

8

ARC auf den Namenskonventionen angewiesen ordnungsgemäß funktioniert. Jedoch ...

Wenn Sie nur ObjC-Objekte verwendet haben, dann wird es normalerweise "funktionieren", solange Sie nur ARC-Code haben. Zum Beispiel hatte, wenn Sie eine Methode wie:

- (id)something { 
    return [[Something alloc] init]; 
} 

Das ist falsch (in nicht-ARC-Code), aber ARC wird es durch effektives Hinzufügen eines zusätzlichen autorelease ausgleichen. In der Tat ist das oben genannte korrekte ARC-Code, so ist es in Ordnung.

Mein Vorschlag, wenn dies fast alles ObjC-Code ist, ist die automatische Umwandlung in ARC und dann den statischen Analysator. Das Problem kann tatsächlich viel kleiner sein, als Sie fürchten, wenn es ziemlich einfacher Code ist, der zufällig schlechte Benennung hat.

Wenn dies gebührenpflichtiger Bridge-Code von Core Foundation ist, sind die Dinge ein wenig komplizierter. Dann würde ich empfehlen, zuerst den statischen Analysator zu starten und die Namensgebung vor der Konvertierung zu überprüfen. Zum Glück ist das statische Analysegerät sehr gut mit Namenskonventionen ausgestattet.

+0

Dank Rob. Ich werde die gesamte Codebasis in Arc konvertieren (abgesehen von einigen externen Bibliotheken wie Erreichbarkeit, JSONKit) – seanoshea

3

Ich musste mehrere Projekte in ARC umwandeln und hatte bisher aufgrund von Namenskonventionen noch nie irgendwelche Probleme.

Eigentlich ist die Konvertierung wirklich unkompliziert - also, während ich Ihre Geisteshaltung über den Code, mit dem Sie umgehen müssen, vollkommen verstehe, würde ich mir nicht wirklich zu viele Sorgen machen.

Bisher habe ich bei der Konvertierung keine ernsthaft schwierige Situation erlebt, solange der zu konvertierende Code von vornherein korrekt und irgendwie klar zu verstehen war.

In der Tat mit ARC finde ich so problemlos wie jede andere Sprache mit integriertem GC - was Speicherprobleme betrifft natürlich!

Im schlimmsten Fall können Sie immer den statischen Analysator laufen lassen - aber selbst das wird heute selten mit ARC benötigt.

Die wahrscheinlich kritischste Situation wird hier diskutiert: What kind of leaks does automatic reference counting in Objective-C not prevent or minimize?

+0

Danke user387184. – seanoshea