There's a good chance you've never seen this keyword in the wild. That's because auto is the default storage class, and therefore rarely needs to be specified explicitly.
Automatic variables have memory automatically allocated when a program enters a block, and released when the program leaves that block. Access to automatic variables is limited to only the block in which they are declared, as well as any nested blocks.
Most Objective-C programmers probably aren't familiar with register either, as it's not widely used in the NS world.
register behaves just like auto, except that instead of being allocated onto the stack, they are stored in a register.
Registers offer faster access than RAM, but because of the complexities of memory management, putting variables in registers does not always guarantee a faster program—in fact, it may very well end up slowing down execution by taking up space on the register unnecessarily. As it were, using register is no more than a mere suggestion to the compiler; implementations may choose whether or not to honor this.
register's lack of popularity in Objective-C is instructive: it's probably best not to bother with. It will sooner cause a headache than any noticeable speedup.