Form one is class factory method that is an optimization useful when you know how large a collection initially needs to be or you know the size will be constant but content may change.
Form two is a class factory method equivalent to calling new. This may or may not be the same as alloc followed by init, but is effectively the same.
Form three is implicitly the same as alloc followed by initWithArray: or initWithDictionary: respectively. It's convenient but generates an unneeded immutable instance that is discarded under ARC it may not be clear when it is discarded.
Use form one or form two generally if you are not going to ever use the immutable instance again elsewhere.