L'obiettivo C, come C, non ha spazi dei nomi. Ciò significa che se qualcuno ha già definito una funzione foo
o una classe Bar
, deve essere globalmente unica e tu non può definirla. Questo può causare un sacco di mal di testa quando hai il tuo codice e poi aggiungere un'altra libreria e improvvisamente le cose si rompono in posti strani.
Lì è una linea guida presentata da Apple per questo in Programmazione con la sezione Objective C: Convenzioni della libreria per sviluppatori iOS:
Some Names Must Be Unique Across Your App
Each time you create a new type, symbol, or identifier, you should first consider the scope in which the name must be unique. Sometimes this scope might be the entire application, including its linked frameworks; sometimes the scope is limited just to an enclosing class or even just a block of code.
Class Names Must Be Unique Across an Entire App
Objective-C classes must be named uniquely not only within the code that you’re writing in a project, but also across any frameworks or bundles you might be including. As an example, you should avoid using generic class names like ViewController or TextParser because it’s possible a framework you include in your app may fail to follow conventions and create classes with the same names.
In order to keep class names unique, the convention is to use prefixes on all classes. You’ll have noticed that Cocoa and Cocoa Touch class names typically start either with NS or UI. Two-letter prefixes like these are reserved by Apple for use in framework classes. As you learn more about Cocoa and Cocoa Touch, you’ll encounter a variety of other prefixes that relate to specific frameworks:
...
Your own classes should use three letter prefixes. These might relate to a combination of your company name and your app name, or even a specific component within your app. As an example, if your company were called Whispering Oak, and you were developing a game called Zebra Surprise, you might choose WZS or WOZ as your class prefix.
Quindi, le librerie di cui parli rompono questa convenzione, ma si trovano al centro del problema della mancanza di namespacing all'interno dell'Objective C.
Ulteriori letture
Namespacing di NSHipster
Qual è il modo migliore per risolvere una collisione nello spazio dei nomi Objective-C?
Come si usano gli spazi dei nomi nel codice dell'obiettivo-c di iOS?