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_retainAutoreleasedReturnValueitd.).

Z góry dziękuję.

questionAnswers(2)

yourAnswerToTheQuestion