Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between @YES/@NO and YES/NO?

In Objective-c what is the difference between @YES/@NO and YES/NO? What types are used for each?

like image 314
cdub Avatar asked Jun 03 '15 05:06

cdub


Video Answer


3 Answers

@YES is a short form of [NSNumber numberWithBool:YES]

&

@NO is a short form of [NSNumber numberWithBool:NO]

and if we write

if(@NO)
   some statement;

the above if statement will execute since the above statement will be

if([NSNumber numberWithBool:NO] != nil)

and it's not equal to nil so it will be true and thus will pass.

Whereas YES and NO are simply BOOL's and they are defined as-

#define YES             (BOOL)1

#define NO              (BOOL)0

YES & NO is same as true & false, 1 & 0 respectively and you can use 1 & 0 instead of YES & NO, but as far as readability is concerned YES & NO will(should) be definitely preferred.

like image 163
Sanjay Mohnani Avatar answered Oct 10 '22 09:10

Sanjay Mohnani


The difference is that by using @ you are creating an NSNumber instance, thus an object. Yes and No are simply primitive Boolean values not objects.

The @ is a literal a sort of shortcut to create an object you have it also in strings @"something", dictionaries @{"key": object}, arrays: @[object,...] and numbers: @0,@1...@345 or expressions @(3*2).

Is important to understand that when you have an object such as NSNumber you can't do basic math operations (in obj-c) such as add or multiply, first you need to go back to the primitive value using methods like: -integerValue, -boolValue, -floatValue etc.

You probably seen it because foundation collection types works only with objects, so if you need to put a series of bools inside an NSArray, you must convert it into object.

like image 19
Andrea Avatar answered Oct 10 '22 09:10

Andrea


  1. @YES/@NO is type of NSNumber,is used when do something with Foundation object.For example

    NSMutableArray * array = [[NSMutableArray alloc] init];
    [array addObject:@YES];//true
    [array addObject:YES];//Wrong
    
  2. YES/NO is BOOLs

like image 4
Leo Avatar answered Oct 10 '22 08:10

Leo