Все другие ответы отсутствовали, как твердый это должно сделать это правильно. Можно сделать первый подход сокращения в этом, которое является с точностью до в известной мере, но пока Вы не примете во внимание режимы округления IEEE (и др.), Вы никогда не будете иметь право ответ. Я записал наивные реализации прежде с довольно большим количеством ошибки.
, Если Вы не боитесь математики, я настоятельно рекомендую чтение следующей статьи David Goldberg, , Что Каждый Программист Должен Знать Об Арифметике С плавающей точкой . Вы получите лучшее понимание для того, что продолжается под капотом, и почему биты размечаются как таковые.
Мой лучший совет состоит в том, чтобы запустить с работы atoi реализацию и съехать оттуда. Вы быстро найдете пропавших без вести вещей но несколько взглядов источник strtod и Вы будете на правильном пути (который является долгим, длинным трактом). В конечном счете Вы похвалите , вводят божество здесь , что существуют стандартные библиотеки.
/* use this to start your atof implementation */
/* atoi - christopher.watford@gmail.com */
/* PUBLIC DOMAIN */
long atoi(const char *value) {
unsigned long ival = 0, c, n = 1, i = 0, oval;
for( ; c = value[i]; ++i) /* chomp leading spaces */
if(!isspace(c)) break;
if(c == '-' || c == '+') { /* chomp sign */
n = (c != '-' ? n : -1);
i++;
}
while(c = value[i++]) { /* parse number */
if(!isdigit(c)) return 0;
ival = (ival * 10) + (c - '0'); /* mult/accum */
if((n > 0 && ival > LONG_MAX)
|| (n < 0 && ival > (LONG_MAX + 1UL))) {
/* report overflow/underflow */
errno = ERANGE;
return (n > 0 ? LONG_MAX : LONG_MIN);
}
}
return (n>0 ? (long)ival : -(long)ival);
}
Как мне отключить эти предупреждения в Xcode?
Нет.
Могу ли я что-нибудь сделать, чтобы отключить эти предупреждения?
Нет.
Я что-то делаю не так при попытке тестирования «белого ящика»?
Нет.
Решение состоит в том, чтобы переместить ваши частные методы в категорию в собственном заголовке. Импортируйте этот заголовок как в файлы реального класса, так и в файлы реализации класса тестового примера.
Похоже, ответ на другой вопрос есть: Is есть ли способ подавить предупреждения в Xcode?
Помните, что на самом деле в Objective-C нет такой вещи, как «частные методы», и не только потому, что это динамический язык. По замыслу Objective-C имеет модификаторы видимости для ivars, но не для методов - не случайно вы можете вызвать любой метод, который вам нравится.
Предложение @Peter - отличное. Чтобы дополнить его ответ, я использовал альтернативу (когда мне не нужен / не нужен заголовок только для частных методов) - объявить категорию в самом файле модульного теста . (Я использую @interface MyClass (Test)
в качестве имени.) Это отличный способ добавить методы, которые будут ненужным раздуванием в коде выпуска, например, для доступа к ivars, к которым у тестируемого класса есть доступ к. (Очевидно, что при использовании свойств это не проблема.)
I ' Мы обнаружили, что этот подход позволяет легко выявить и проверить внутреннее состояние, а также добавить методы, предназначенные только для тестирования. Например, в этом файле модульного теста я написал метод -isValid
для проверки правильности двоичной кучи. В производственной среде этот метод был бы пустой тратой места, поскольку я предполагаю, что куча допустима - меня это волнует только при тестировании регрессий модульного теста, если я изменяю код.
Хотя наличие частного заголовка или определение собственной категории, вероятно, являются более правильными решениями, существует еще одно очень простое решение: преобразовать объект в (id) перед вызовом метода.