Your confusion stems from two separate concepts: Objective-C 2.0 properties and memory management.
Whether to use assign or retain depends entirely on what you're trying to do and whether you're using garbage collection. If you're not using garbage collection, for example, and you were using assign, then set mass to [NSNumber numberWithInt:0], your (autoreleased) NSNumber instance would go away and you'd have problems next time you tried to use it.
Regarding how many releases you need in the second code block, you truly need to (re)read the memory management documentation. If you created the object (through the methods mentioned in the docs), you're responsible for releasing it. That's it. Whether something else retains it or not is "none of your business". So, following that logic, if your mass property retains (and properly releases) its value (and it will if you use @synthesize or follow proper accessor setter examples), it's handling its own business just fine. Again, if you create the object, you're responsible for releasing it. Others may retain/release the object as needed but that's beyond your concern.
Also, [[NSNumber alloc] numberWithInt:5] is wrong. You alloc/init... but you don't alloc, then call a convenience method (that presumably will alloc/init... an instance itself).