.
As the name suggests, they extend the class. A class continuation is another name. The class extension is commonly used to declare private methods and properties. You want the class extension to be visible to the @implementation
, and not in the header file.
Types and methods in the header file are generally intended to be public -- available to any client.
Example: The property declared in the class extension will not be visible/accessible to clients who #import
the header, but it will be usable by the @implementation
because the @implementation
can see the declarations of the class extension.
So this can be used to emulate restricted access for your ivars and methods. This is useful because ObjC methods and properties cannot be specified as private/protected/public (e.g. using @public
).
Class extensions differ from categories primarily because extensions may declare storage (e.g. properties which will produce backing ivars).
.