ваш код:
BOOL var = [[NSUserDefaults standardUserDefaults] objectForKey:@"foo"];
присваивает адрес объекта по существу целому числу некоторого размера ...
Это почти всегда не то, что вы хотите.Вы, вероятно, хотите:
BOOL var = [[[NSUserDefaults standardUserDefaults] objectForKey:@"foo"]boolValue];
Если вы хотите назначить на основе наличия этого объекта, вы можете сделать:
BOOL var = !![[NSUserDefaults standardUserDefaults] objectForKey:@"foo"];
Причина в том, что еслимладшие 8 битов адреса должны были быть равными 0, это мог быть допустимый объект, но это было бы ложное значение, которое было бы результатом усеченного присваивания.
int main(int argc, const char * argv[]) {
BOOL b = 2;
if (b == YES)
{
NSLog(@"I guess you are right");
}else{
NSLog(@"nope");
}
print: nope