Nie, nie ma różnicy. Ze słowem kluczowym const
jest wiele rzeczy, do których może się odnosić deklaracja; może dotyczyć wskaźnika lub może odnosić się do wskazywanej wartości.
Kwalifikatory własności mają sens tylko na wskaźnikach do obiektów. Sam przedmiot nie może być "silny" lub "słaby"; to wskaźnik do obiektu, który jest silny lub słaby. ARC ma sens tylko wtedy, gdy jest zastosowany bezpośrednio do typów wskaźnik-obiekt i wpływa na to, jak czas życia wskaźnika wpłynie na czas życia obiektu.
Biorąc pod uwagę, że nigdy nie ma żadnych wątpliwości co do tego, do czego kwalifikator własności może mieć zastosowanie, specyfikacja ARC umożliwia umieszczenie kwalifikatora własności w dowolnym miejscu definicji wskaźnika na obiekcie. Oba przykłady są równie ważne. Podobnie, wszystkie z poniższych oznaczają to samo:
NSError * __autoreleasing * someObject;
NSError __autoreleasing ** someObject;
__autoreleasing NSError ** someObject;
pamiętać, że kompilator narzeka na ten jeden, choć:
NSError ** __autoreleasing someObject;
To dlatego, że zostały przeniesione poza definicją pointer- sprzeciwiać się. Możesz sparsować to jako (NSError *)* __autoreleasing someObject;
. Zanim przejdziesz do drugiego *
, już zdefiniowałeś typ wskaźnika, więc __autoreleasing
nie ma sensu. Wszędzie w definicji typu wskaźnika jest w porządku, ale po przejściu na typ wskaźnika do wskaźnika, odnosi się to do czegoś innego i nie ma już sensu.