If you have 2 categories which override the methods of one class, it is undefined which one will replace the old. Category syntax is similar to class syntax. They have both interfaces and implementations. There is a slight difference however. ClassName is the name of the class you're extending and CatagoryName is a way to identify the category.
Categories have access to all instance variables of the class the extend.
You can use categories to make mock private methods. Put the category interface above the class's implementation in the same file. Put any methods you want to be private in this category. Create the object's implementation, then, at the bottom of the file, put the category's implementation. This will hide the methods from the rest of the world in such a way that the compiler will generate warnings if you access these methods.