Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

ObjC: Initializing a Class Object

  1. Mar 5, 2006 #1
    Hello everyone;

    I've been reading a document over on Apple's Developer website, called "The Object-C Language."

    I'm reading about classes, and there is a part called "Initializing a Class Object" and it gives an example of how to implement an initialize method for a class:

    + (void) initialize
         static BOOL initialized = NO;
         if (!initialized) {
              // Perform initialization here
              initialized = YES;
    So I assume at runtime you would send [myClass initialize]. What I don't understand, is in that method you declare the static variable initialized to = NO. If the initialize method got called again, wouldn't it set the initialized variable again to NO, and then rerun the initialization?

    So my question is, what is the point of declaring the initialized = NO, and then checking if it's not initialaized? Would the initialize method be the only method able to access that initialized variable?

    Sorry if this is a really basic question.. I'm trying to learn some basics of object oriented programming and objective-C from the docs.

    Thank you
  2. jcsd
  3. Mar 6, 2006 #2
    In C and C++, when a static variable is initialized in this way, the assignment is only executed once. Perhaps the same is true of Object-C.
  4. Mar 6, 2006 #3
    So how would the code operate at runtime? If the initialize method were called again, when it gets to the line:

    static BOOL initialized = NO;

    What would happen? I guess I'm stuck in my old thought of Pascal programming, where in a procedure/function any variable you declare there is only good for that one time the procedure/function is u sed.

    I guess the question is, what, exactly, does "static" do to a variable?
  5. Mar 6, 2006 #4
    It puts in on the heap instead of the stack. While the stack is volatile, the heap is not. So when the routine is invoked a second time, the variable still holds the value it held when the last assignment was executed.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook