objective-c static/class method definition – what is the difference between “static” and “+”?-Collection of common programming errors

Unlike in (say) C++, where static member functions are just ordinary functions in the class’ namespace, Objective-C has proper class methods.

Since classes are objects, calling a class method is really like calling an instance method on the class. The main consequences of this are:

1) Calling a class method incurs a slight (although generally inconsequential) overhead, since method calls are resolved at runtime.

2) Class methods have an implicit ‘self’ argument, just like instance methods. In their case, ‘self’ is a pointer to the class object.

3) Class methods are inherited by subclasses.

together, 2 and 3 mean that you can do stuff like this with a class method:

+ (id) instance
{
    return [[[self alloc] init] autorelease];
}

then create a new class that inherits the method and returns a new instance of itself, rather than the superclass.

I believe that marking an ordinary c function static will just make it unavailable to files other than the one it’s defined in. You’d generally do this if you wanted to make a helper function that is only relevant to one class and you wanted to avoid polluting the global namespace.