what is the difference between these two approaches for objection creation?

1. `NSNumber *aInt= @54;`
2. `NSNumber *aInt= [NSNumber numberWithInt:54];`

I know that first approach is NSNumber literal and second is NSNumber class methods. Both are used to create an NSNumber object. But which approach is better?
if i creates object using literal style then how memory is allocated to it? How it is differ then second approach? Please suggest me some key point about these concepts so that i prefer better approach to create NSNumber object.

I know that object created at runtime. Does literals objects are also created at runtime? please provide some essential key points to clear my doubt.