2012-09-24 13 views
6

Mam do czynienia z bazą kodów, w której standardy nazw były rutynowo ignorowane. W niektórych klasach istnieją metody zwracające obiekty o liczbie odwołań równej 1, mimo że nazwa metody nie jest zgodna z NARC. Fantastyczne rzeczy.Migracja do Arc ze złymi standardami nazewnictwa

Chciałbym przekonwertować projekt na automatyczne liczenie odwołań, ale jestem trochę nerwowy, ponieważ standardy nazewnictwa NARC zostały całkowicie zignorowane. Czy ktoś wie, czy ARC opiera się na standardach nazewnictwa NARC, aby działały prawidłowo?

Dzięki,

Sean

Odpowiedz

8

ARC ma polegać na konwencji nazewnictwa, aby działać poprawnie. Jednak ...

Jeśli używałeś tylko obiektów ObjC, to zazwyczaj "wyszło" tak długo, jak masz tylkokod ARC. Na przykład, jeśli miał metody takie jak:

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

To jest złe (w non-ARC kodu), ale ARC zrównoważy ją skutecznie dodając dodatkowy autorelease. W rzeczywistości powyższy kod jest poprawny ARC, więc jest w porządku.

Moja sugestia, jeśli jest to prawie cały kod ObjC, to automatyczna konwersja do ARC, a następnie uruchomienie analizatora statycznego. Problem może być znacznie mniejszy niż obawiasz się, jeśli jest to dość prosty kod, który po prostu ma złe nazewnictwo.

Jeśli jest to mocno obciążony, bezpłatny most Foundation, rzeczy są nieco bardziej skomplikowane. Zalecamy najpierw uruchomić analizator statyczny i uzyskać poprawne nazewnictwo przed konwersją. Na szczęście konwencje nazewnictwa są bardzo dobre w analizatorze statycznym.

+0

Dzięki Rob. Będę konwertować cały kod do łuku (poza niektórymi bibliotekami zewnętrznymi, takimi jak Reachability, JSONKit). – seanoshea

3

Musiałem przerobić kilka projektów na ARC i jak dotąd nie napotkano żadnych problemów bezpośrednio z powodu konwencji nazewniczych.

W rzeczywistości konwersja jest naprawdę prosta - więc chociaż w pełni rozumiem twój stan umysłu na temat kodu, z którym masz do czynienia - nie martwiłbym się zbytnio.

Do tej pory nigdy nie spotkałem się z żadną poważnie trudną sytuacją podczas konwersji, o ile kod do konwersji był poprawny i jakoś zrozumiały.

Używanie ARC jest tak samo bezproblemowe, jak każdy inny język z wbudowanym GC - oczywiście w kwestii pamięci!

W najgorszym przypadku zawsze można uruchomić analizator statyczny - ale nawet to rzadko jest wymagane obecnie w przypadku ARC.

Prawdopodobnie najbardziej krytyczna sytuacja została omówiona tutaj: What kind of leaks does automatic reference counting in Objective-C not prevent or minimize?

+0

Dzięki user387184. – seanoshea