У меня есть некоторый код в моем приложении, который выглядит примерно так:Почему Какао иногда возвращает пустую строку?
char *hash = (char*) sqlite3_column_text(get_bookmark, 0);
NSString* postHash = [NSString stringWithUTF8String:hash];
Это работает для меня каждый раз; Я никогда не видел не работа. Большинство моих пользователей не испытывают проблем (насколько я знаю). Однако я обнаружил, что postHash
- это пустая строка (@""
) для некоторых пользователей некоторое время.
Может ли кто-нибудь объяснить, почему?
Некоторые больше контекста/спекуляции:
Это только кажется, что произойдет на взломанных телефонах. Есть ли в них что-то другое? Я понимаю, что, как правило, меньше памяти. Что-нибудь еще, что может здесь помочь?
postHash
используется в ячейке таблицы, и изредка считается, что оно заполнено правильно, поэтому я уверенно уверен, что вызов базы данных должен работы. На самом деле, если в базе данных также есть пустая строка, это из-за очень похожего кода, поэтому вопрос остается.
hash
, безусловно, возвращается с не-NULL значением. Если я заставляю NULL здесь, приложение падает. Аналогично, postHash
не nil
, так как это также приведет к сбою приложения (по той же причине).
Я думаю, что это возможно связано с памятью. Если метод пытается выделить слишком много памяти до того, как -didReceiveMemoryWarning
может получить вызов, что произойдет? Я знаю, что в какой-то момент Springboard выбрасывает приложение. Но возможно ли, что Cocoa возвращает здесь нулевую строку, а не ожидаемое значение? Я слышал о нескольких отчетах, которые, насколько я могу судить, могут быть вызваны пустой строкой, в которой должно присутствовать что-то более длинное.
Любые другие предположения, теории или идеи приветствуются.
«Но возможно ли, что Cocoa возвращает здесь нулевую строку, а не ожидаемое значение?» «Нуль-строка» будет либо NULL (C-string), либо nil (NSString).Пустая строка совсем другая: это строка, в которой нет символов, тогда как NULL/nil вообще не является строкой. –
Это не мое понимание того, что такое «пустая строка». Когда я говорю «пустая строка» выше, я имею в виду «пустую строку», т. Е. @ «» В Objective-C или «» в C. Значение nil/NULL приводит к сбою приложения. –
"Null" означает 0. Нулевой символ равен '\ 0'; т. е. 0. Нулевой указатель равен 0. В C нет такой вещи, как «пустая строка», потому что если она равна null, это не строка; это всего лишь 0. –