Is it safe to count on ints 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?
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
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).