Baby new to Xcode, Cocoa touch and iOS development in general. And am taking the Stanford walkthrough for their iPhone class. I am a little confused at a couple of places and need to shoot my doubts to you guys:
I have two classes that I have created for my model, essentially CalculatorBrain.m and CalculatorBrain.h.
From what I gather, in Objective C, creating a class essentially consists of two functions, one is to declare the class which contains the method/messages and other variables while the other is the actual implementation for the same. From this stems two questions:
-
Why must I declare a class without implementing it’s methods at first? (the concept seems to be borrowed from interfaces) and only then move on to implementing it .
-
From the above question, as I go through the walkthrough, I notice that the class declaration took place in CalculatorBrain.h whereas the methods were actually implemented in CalculatorBrain.m. I am unable to grasp the nuances of why this was done so if anybody is willing to shed some light on this, it would really help
Thanks again,
Parijat Kalia!!!
These are traditions from the C world, and they’re just common practice to avoid some problems. They aren’t two classes, they are the definition (in the .h file) and the implementation (in the .c or .cc file).
If you defined the class in the .c file, you couldn’t refer to it elsewhere because it wouldn’t be defined. You could include your .c file, but then you’d have two copies of the code. You could also use the “extern” keyword, but at this point it’s kind of odd.
If you put code in the .h file, then when it’s included the code gets included. This means you can get compiler errors that you have three “getMyThing” functions.
This means you can give out your headers to others without giving away your top-secret implementation (useful for making libraries), include your header without worrying about the possible multiple definitions, etc. You can also add variables and functions in the .c file which people using the header (like your other code) can’t see or use, so you don’t have to worry about changing it later and having compilation break.