Are ints always initialized to 0?
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?
- Can't access NSString from another class — Objective-c
- Can you add a UITableViewController's TableView to another View?
- NSString is integer?
- NSSortdescriptor ineffective on fetch result from NSManagedContext
- How to get battery consumption value for an iOS app (x mAh/min)?
- Objective-C++ and .cpp files in Xcode
3 Solutions Collect From Internet About “Are ints always initialized to 0?”
Yes, class instance variables are always initialized to 0 (or
false, depending on the exact data type). See the Objective-C 2.0 Programming Language:
allocmethod dynamically allocates memory for the new object’s instance variables and initializes them all to 0—all, that is, except the
isavariable that connects the new instance to its class.
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:
allocmethod has one other important task, which is to clear out the memory allocated for the object’s properties by setting them to zero. This avoids the usual problem of memory containing garbage from whatever was stored before, but is not enough to initialize an object completely.
However, this is only true for instance variables of a class; it is also true for POD types declared at global scope:
// At global scope int a_global_var; // guaranteed to be 0 NSString *a_global_string; // guaranteed to be nil
With one exception, it is not true for local variables, or for data allocated with
realloc(); it is true for
calloc() 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 to
nil. From the Transitioning to to ARC Release Notes:
Stack Variables Are Initialized with
Using ARC, strong, weak, and autoreleasing stack variables are now implicitly initialized with
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).
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, in C global vars are initialized to zero.
In Objective-C even local vars are initialized to zero.
You can count on it.
- Subtract 7 days from current date
- Swift – Protocol extensions – Property default values
- Is it possible to upload an iOS app to App Store for internal testing from Xcode 7 beta?
- A Swift example of Custom Views for Data Input (custom in-app keyboard)
- IOS – best way to queue requests to be sent when connection is reestablished
- AFnetworking 2.2.0 upload image on server issues
- Declaring constants instead of literals in vertex shader. Standard practice, or needless rigor?
- How to get Table Of Content in document view for Xcode 6.2?
- Modifying UIButton's alpha property from another class
- Asking camera permission on iPad
- Set front-facing camera in Xcode
- UIPageViewController transition 'Unbalanced calls to begin/end appearance transitions for '
- Set focus to UITextField in tableCell
- How to get change in network connection notification from iOS Reachability Class?
- Tweet, without using the tweet sheet