Is it safe to count on int
s always being initialized to 0 in Objective-C?
More specifically, when an object with int
ivars has been newly instantiated, is it safe to assume that its ivars have value 0?
Is it safe to count on int
s always being initialized to 0 in Objective-C?
More specifically, when an object with int
ivars has been newly instantiated, is it safe to assume that its ivars have value 0?
Yes, in C global vars are initialized to zero. In Objective-C even local vars are initialized to zero. You can count on it.
I don't think you should assume any values for initialization. If you are building logic around a "0" value, you should set it to be sure.
Yes, class instance variables are always initialized to 0 (or
nil
,NULL
, orfalse
, depending on the exact data type). See the Objective-C 2.0 Programming Language:EDIT 2013-05-08
Apple seems to have removed the above document (now linked to The Wayback Machine). The (currently) active document Programming With Objective-C contains a similar citation:
However, this is only true for instance variables of a class; it is also true for POD types declared at global scope:
With one exception, it is not true for local variables, or for data allocated with
malloc()
orrealloc()
; it is true forcalloc()
, sincecalloc()
explicitly zeros out the memory it allocates.The one exception is that when Automatic Reference Counting (ARC) is enabled, stack pointers to Objective-C objects are implicitly initialized to
nil
; however, it's still good practice to explicitly initialize them tonil
. From the Transitioning to to ARC Release Notes:In C++ (and C++ objects being used in Objective-C++), class instance variables are also not zero-initialized. You must explicitly initialize them in your constructor(s).