ObjC: Initializing a Class Object

  • Thread starter Thread starter aychamo
  • Start date Start date
  • Tags Tags
    Class
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
3 replies · 4K views
aychamo
Messages
375
Reaction score
0
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:

PHP:
+ (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
Aychamo
 
Physics news on Phys.org
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.
 
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?
 
aychamo said:
I guess the question is, what, exactly, does "static" do to a variable?
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.