el primero es ideales para las constantes porque la cadena que apunta no puede ser cambiado:
//.h
extern NSString * const MyConstant;
//.m
NSString * const MyConstant = @"MyConstant";
...
MyConstant = @"Bad Stuff"; // << YAY! compiler error
and
//.h
extern NSString *MyConstant;
//.m
NSString *MyConstant = @"MyConstant";
...
MyConstant = @"Bad Stuff"; // << NO compiler error =\
en definitiva, el uso const (el primero) por defecto. el compilador le informará si intenta cambiarlo en el futuro; luego puede decidir si fue un error en su nombre o si el objeto al que apunta puede cambiar. es una buena protección que ahorra muchos errores/arañazos.
la otra variación es para un valor de:
extern int MyInteger; // << value may be changed anytime
extern const int MyInteger; // << a proper constant