Just as a quick addendum... Apple added support for a new type "instancetype" in clang, which represents the instance type of whatever class the method is running in. They still use id as the return type for their init methods, but it strikes me that alloc/init is the perfect place to use it.

NSCharacterSet's various convenience constructor methods are declared in GNUstep to return NSCharacterSet , rather than id. This causes the warning "warning: incompatible pointer types initializing 'NSMutableCharacterSet ' with an expression of type 'NSCharacterSet *' [-Wincompatible-pointer-types]" when declaring an NSMutableCharacterSet as so: