# инструкции в Objective-C

#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 , а затем снова скомпилировать программу.