NSUserDefaults boolean exist or not in init stage check

[userDefaults boolForKey:@"theKeyOfMyBOOL"]; returns a BOOL, so either YES or NO (not nil).

Internally, it is stored as an NSNumber. So, if you call

[userDefaults objectForKey:@"theKeyOfMyBOOL"];
you will be given an NSNumber, if you have ever stored anything, or nil, if you have not.