Boxed expressions allow values to be interpreted before assigning to an object when using literals with Objective-C (see the end of post for links to more information). It’s not as confusing as it sounds, let’s look at a few examples:

The code below shows how to used a boxed expression to create a **NSNumber** object, calculated by multiplying to values:

#define SECONDS_PER_MINUTE 60 int minuteCount = 50; NSNumber *howManySeconds_NonBoxed = [NSNumber numberWithInt: (minuteCount * SECONDS_PER_MINUTE )]; NSNumber *howManySeconds_Boxed = @(minuteCount * SECONDS_PER_MINUTE); NSLog(@"Total seconds: %@", howManySeconds_Boxed); |

A similar idea follows using float values:

float startValue = 100000.123f; NSNumber *floatValue = [NSNumber numberWithFloat:(startValue / 100000)]; |

Here is how you can wrap a boolean in a boxed expression:

NSNumber *idleTimer_NonBoxed = [NSNumber numberWithBool:[[UIApplication sharedApplication] isIdleTimerDisabled]]; NSNumber *idleTimer_Boxed = @([[UIApplication sharedApplication] isIdleTimerDisabled]); |

The example below demonstrates how to use a boxed expression with a C string to create an NSString object. The C string is parsed using **strpbrk** to find the location of the first digit in the string. From there, the boxed expression bumps the pointer by one to point to the string following the digit.

// Get pointer to the first digit in C string // In this example, there is a digit zero in the word f0r const char *digitPtr = strpbrk("Check this string f0r digits", "1234567890"); // Create NSString object that represents the string ~after~ the // first digit was found - notice the boxed expression to // bump the char pointer to the string after the digit NSString *strAfterDigit = digitPtr == NULL ? nil : @(digitPtr + 1); NSLog(@"strAfterDigit: %@", strAfterDigit); |

The last example is using enum type and a boxed expression to

enum { RemoteAccessSuccess = 200, RemoteAccessNotFound = 404, RemoteAccessError = 500, }; NSNumber *fubar = @(RemoteAccessError); |

## Information on Objective-C Literals and Objective-C Boxed Expressions

You can read more about Objective-C Boxed Expressions in the Clang reference.

Apple has additional information about Objective-C literals in their Programming with Objective-C guide.

Following are links to tutorials on using Objective-C literals:

– NSArray literals

– NSNumber literals

– NSDictionary literals

I like that this syntax is available, but it can sometimes

make debugging a pain. I have only too frequently seen people go

overboard by putting too much in a boxed expression and good luck

trying to parse that visually if you didn’t write it. In the end, I

prefer to just break out some of these in to separate lines and

give them temp variables, it does worlds for clarity.

I like the way boxing cleans up my code so much I expanded on its capability. https://github.com/wildthink/autobox?source=cc

Thanks Jason, it’s nice to see a few code examples using the __attribute__ compiler directive.