private
means nothing in Objective-C, you call it peanuts
if you want. It's really a label to differentiate categories if you have multiple, but it's value is arbitrary. It just has to mean something to you as a developer.
The @implementation store
line marks the beginning of the implementation for the class defined by @interface store
(i.e. no category), which is probably declared in a '.h' file. It's the fact that the interface is in the '.h' that makes it public (because other classes can import the .h
file and therefore see the declaration of properties, methods, etc...).
It doesn't support multiple implementations, they are additive. Of course, then you have the question of implementing the same method in both. This is strongly discouraged by Apple. Here's the doc.
Avoid Category Method Name Clashes
Because the methods declared in a category are added to an existing class, you need to be very careful about method names.
If the name of a method declared in a category is the same as a method in the original class, or a method in another category on the same class (or even a superclass), the behavior is undefined as to which method implementation is used at runtime. This is less likely to be an issue if you’re using categories with your own classes, but can cause problems when using categories to add methods to standard Cocoa or Cocoa Touch classes.