I've never heard of Objective-C described as a 'simple language'; on the contrary, some of the language features of Objective-C – such as dynamic binding, categories and introspection – make it a rather powerful language.
However there are a few reasons why it could be seen to be a language that is less feature-rich than others, including:
- There was no garbage collection (generally speaking) until Apple's Objective-C 2.0, before which memory was managed largely by reference-counting; this is different to languages such as Java which use garbage collection for all memory management.
- There are no namespaces in Objective-C; again this is unlike other languages out there such as C++. Convention is that classes and functions should be prefixed, as can be seen in Foundation, AppKit etc which are prefixed with
NS
-. This can sometimes be a disadvantage.
- There are no true abstract classes. In Objective-C, abstract classes are only abstract by design, and can still be instantiated as-is, and won't generate compiler warnings or errors.
- There is no operator-overloading. This is due to the nature of the Objective-C runtime and how method dispatch works. Instead, methods that take different argument types must be named differently; this may not necessarily be a disadvantage, as it can often improve clarity of code.
However despite all of this, Objective-C has some rather useful features, some of which are directly or indirectly the result of the lack of certain features that other languages may have, such as:
- Using descriptive names (due to no operator overloading) often clarifies code and allows it to be self-documenting in many circumstances.
- Categories are useful for extending classes that you do not have direct access to.
- Dynamic dispatch means you can add, change or remove methods at will, and provides powerful introspection of classes.