Por que uma variável NSInteger precisa ser convertida para longa quando usada como um argumento de formato?

NSInteger myInt = 1804809223;
NSLog(@"%i", myInt); <==== 

O código acima produz um erro:

Values of type "NSInteger" should not be used as format arguments: add an explicit cast to 'long' instead.

O corretoNSLog a mensagem é realmenteNSLog(@"%lg", (long) myInt); Por que preciso converter o valor inteiro de myInt em long se quiser que o valor seja exibido?

questionAnswers(5)

yourAnswerToTheQuestion