Objective-C is defined as an extension of C. Preprocessor commands and compiler directives are exactly what they are for C.
There is no "formal" definition of the Objective-C language (no standard). Apple publishes a document that more or less explains this. There is also no real "version number" of the language. Apple sometimes adds a new feature and what it is. At some point, Apple decided to promote a certain set of functions as “Objective-C 2.0”, but this does not mean that all previous versions have the same set of functions, which means that all subsequent versions will have the same set of functions. The most recent nickname that Apple used is "modern Objective-C" and refers to a language that supports all the functions currently defined.
Note that some functions are defined at the compiler level, others are defined at the library level, and others are a combination of both. If you use a function that is fully implemented at the compiler level (for example, the new literal syntax), it will work for any program that you write and compile with this compiler. But if you use a function defined at the library level or which requires both compiler and library support, it will only work for programs running on systems where the latest library is available (Apple does not allow you to statically link language libraries). Examples are things like GC, ARC, and zeroing semantics tied to weak .
Therefore: yes, "modern Objective-C" differs from the previous Objective-C in that you should consider it a new version, but no, there is no version number attached to it, and it is quite possible that Apple will add new functions to the language since then they call it "modern Objective-C". In addition, the fact that functions are part of the language depends not only on the compiler, but also on the target system for which you are compiling. Therefore, the "modern Objective-C" program focused on iOS 4 can use a different set of functions than the "modern Objective-C" program focused on OsX 10.8.
source share