Cel C, podobnie jak C, nie ma przestrzeni nazw. Oznacza to, że jeśli ktoś już zdefiniował funkcję foo
lub klasę Bar
, musi ona być globalnie unikalna i nie można jej zdefiniować. Może to powodować wiele problemów, gdy masz kod, a następnie dodajesz kolejną bibliotekę i nagle rzeczy psują się w dziwnych miejscach.
Jest to wytyczne przedstawione przez firmę Apple za to w Programowanie w Objective C: Konwencje dział programistów iOS:
Niektóre nazwy muszą być unikalne w całej aplikacji
Za każdym razem, gdy tworzysz nowy typ, symbol lub identyfikator, najpierw powinieneś rozważyć zakres, w którym nazwa musi być unikalna. Czasami tym zakresem może być cała aplikacja, w tym powiązane ramy; czasami zakres jest ograniczony tylko do otaczającej klasy lub nawet tylko bloku kodu.
Nazwy klas muszą być unikalne w całej aplikacji
Klasy Objective-C muszą mieć unikalne nazwy nie tylko w kodzie, który piszesz w projekcie, ale także we wszystkich ramach lub pakietach, które możesz zawierać. Na przykład należy unikać używania ogólnych nazw klas, takich jak ViewController lub TextParser, ponieważ możliwe jest, że środowisko zawarte w aplikacji może nie spełniać konwencji i tworzyć klasy o tych samych nazwach.
Aby nazwy klas były unikalne, konwencja polega na stosowaniu prefiksów we wszystkich klasach. Zauważysz, że nazwy klas Cocoa i Cocoa Touch zwykle zaczynają się od NS lub interfejsu użytkownika. Dwuliterowe przedrostki są zastrzeżone przez Apple do użytku w klasach frameworka. Gdy dowiesz się więcej o Cocoa i Cocoa Touch, napotkasz wiele innych prefiksów, które odnoszą się do konkretnych ram:
...
Twoje własne klasy powinny używać trzyliterowych prefiksów. Mogą one odnosić się do kombinacji nazwy firmy i nazwy aplikacji, a nawet określonego komponentu w aplikacji. Na przykład, jeśli twoja firma nosiła nazwę Whispering Oak, a ty opracowywałeś grę o nazwie Zebra Surprise, możesz wybrać WZS lub WOZ jako prefiks klasy.
Biblioteki, o których wspominasz, w pewnym sensie łamią tę konwencję, ale zajmują się problemem braku przestrzeni nazw w Celu C.
Dalsza lektura
Przestrzeń nazw NSHipster
Jaki jest najlepszy sposób rozwiązania kolizji przestrzeni nazw Objective-C?
Jak korzystać z przestrzeni nazw w kodzie C celu iOS?
;-)