Obiektywne konwencje nazewnictwa C z ARC i możliwe zastrzeżenia
Mam doświadczenie w czystym kodowaniu ARC. Jako funkcja kompilatora honoruje rodzinę Objctive-C, wprowadzając poprawne zachowanie / zwolnienie wywołań zawsze, gdy jest to konieczne.
Wszystkie metody, które zaczynają się odalloc
, mutableCopy
, copy
inew
utwórz nowy obiekt. Zwiększają liczbę zatrzymań. W konsekwencji ARC zwolni dowolny wskaźnik (a tym samym powiązany z nim obiekt), gdy go już nie potrzebuję.
Myślę, że problemy mogą pojawić się, gdy piszę metody, które nie przestrzegają konwencji nazewnictwa. Na przykład, jeśli piszę taką metodęnewCustomer
że w pierwszej wersji zwraca obiekt autoreleased, podczas gdy w drugiej wersji nie, co może się zdarzyć?
W szczególności moje pytania są następujące (należą do tego samego rozumowania):
Co się stanie, jeśli kod wywołujący i wywoływany są skompilowane z ARC?(za) Co się stanie, jeśli kod wywołujący zostanie skompilowany z ARC, podczas gdy wywoływany jest kompilowany z nie-ARC?(b) Co się stanie, jeśli kod wywołujący zostanie skompilowany z nie-ARC, podczas gdy wywoływany jest kompilowany z ARC?Doceniłaby odpowiedź, która pokazuje, jak ARC działa pod maską (objc_release
, objc_retainAutoreleasedReturnValue
itd.).
Z góry dziękuję.