I am fairly new to realm of iOS. Coming from Java and Android background i am facing few challenges while learning objective C.

My question: I understand how the above three are different from each other but I fail to understand their use cases in practice. 

Do we need a Class Extension for every class with private functions? What is the use of Category, when we can extend a Cocoa/Cocoa-touch class in interface and add custom functions? Please do provide some example from your experience.