Это - одно из лучших описаний NSError.
На самом деле вы передаете не объект, а указатель на указатель.Таким образом, вы можете установить NSError перед отправкой сообщения объекту на nil, и только в случае ошибки ваш NSError «внезапно» будет содержать значение, так что вы сможете делать такие вещи:
NSError *err = nil;
[SomeClass doSomethingGreatWhichCanFailWithError:&err];
if(err) {
NSLog("Something failed :-(");
//TODO: Add better logging!
}
В противном случае вам придется создать экземпляр NSError перед отправкой сообщения и затем проверить свойство или что-то еще, если произошла ошибка.