#objective-c
#objective-c
Вопрос:
Я наткнулся на следующий код, и мне интересно, что означает #statement и есть ли какие-либо хорошие места, чтобы узнать, как использовать синтаксис:
#if __IPHONE_3_0
cell.textLabel.text = [photoTitles objectAtIndex:indexPath.row];
cell.textLabel.font = [UIFont systemFontOfSize:13.0];
#else
cell.text = [photoTitles objectAtIndex:indexPath.row];
cell.font = [UIFont systemFontOfSize:13.0];
#endif
Ответ №1:
Это не Objective-C, это «препроцессор C», который в основном представляет собой специализированную систему синтаксического анализа текста, которая запускается для каждого исходного файла в вашем проекте до его фактической компиляции. Это та же система, которая обрабатывает #import
директивы.
Думайте об этом как о предоставлении «мета» компиляции для вашего кода. В этом случае существует переменная среды компилятора для iPhone 3.0. Если эта переменная присутствует, компилируются первые две строки кода. Если нет, то это делают вторые два.
Гораздо больше информации здесь:http://en.wikipedia.org/wiki/C_preprocessor
Комментарии:
1. итак, когда вы используете это, а когда нет? Какой в этом смысл?
2. Вот документация Apple по препроцессору.
3. В данном случае он используется для компиляции разного кода в зависимости от того, является ли целевой версией iOS 3.0 или нет, потому что автор хочет избежать использования устаревшей функциональности в случае после версии 3.0. Он используется для любой «мета» работы над базой кода, подобной этой. В зависимости от вашего проекта, вы можете никогда не увидеть большую его часть (кроме
#import
). Это также часто используется в форме#define
для создания «магических чисел» в константах времени компиляции кода в верхней части исходного файла.
Ответ №2:
Это директивы препроцессора C. Они позволяют изменять исходный код программы в зависимости от параметров компилятора, прежде чем исходный код будет скомпилирован.
В вашем примере первый блок кода (между #if
и #else
) компилируется в, если код компилируется для iOS 3.0 (или более поздней версии). В противном случае используется второй блок кода.
Обратите внимание, что это происходит во время компиляции, а не во время выполнения. Таким образом, описанный выше метод более полезен для кода, который используется в нескольких проектах.
Если вы ищете информацию о «директивах препроцессора», вы должны найти намного больше информации.
Ответ №3:
Это директивы компилятора, в частности, условные обозначения. Они заставляют ваш код компилироваться по-разному в зависимости от среды во время компиляции.
Для получения дополнительной информации об условных выражениях и других директивах компилятора ознакомьтесь с этой страницей об условных выражениях в препроцессоре C, которые работают одинаково как для C, так и для Objective-C.
Помните, что они вступают в действие только во время компиляции. Если вы скомпилируете этот код в конфигурации iPhone 3.0, программа не будет определять во время выполнения, что вы запускаете ее на iPhone 4. Вам придется перенастроить исходный код так, чтобы он не был определен __IPHONE_3_0
, а затем снова скомпилировать программу.