Ошибка NSError *;vs NSError * error = nil; - PullRequest
5 голосов
/ 25 февраля 2012

Я разработал приложение ios, которое имело:

NSError *error; 

вместо:

NSError *error = nil;  

Оно работало нормально, пока я отлаживал в симуляторе и отлаживал на устройстве, покасвязано.В тот момент, когда я заархивировал его и отправил в TestFlight для развертывания для тестирования, я начал получать ошибки Неизвестный сигнал в журнале сбоев.

Почему это происходит?

Ответы [ 2 ]

6 голосов
/ 25 февраля 2012

Это происходит потому, что у вас есть неинициализированный указатель.Он не падает, если вам повезет, но использование таких указателей неопределенное поведение .

3 голосов
/ 25 февраля 2012

Чтобы уточнить ответ dasblinkenlights, это объявление переменной:

NSError *error; 

... и это объявляет И присваивает переменную

NSError *error = nil;  

Когда вы используете его первым способом и пытаетесь получить к нему доступ, не устанавливая его для чего-либо, значение, на которое оно указывает, называется «мусором». Это указатель на какой-то другой стек памяти, и доступ к нему почти всегда заставляйте ваше приложение падать. Таким образом, всегда лучше присваивать значение вашей переменной, как указано выше, или вскоре после этого.

...