# заявления в Objective-C - PullRequest
       1

# заявления в Objective-C

2 голосов
/ 28 апреля 2011

Я наткнулся на следующий код, и мне интересно, что означает #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

Ответы [ 3 ]

4 голосов
/ 28 апреля 2011

Это не Objective-C, это «препроцессор C», который в основном представляет собой специализированную систему анализа текста, которая запускается на каждом исходном файле в вашем проекте до его фактической компиляции.Это та же система, которая обрабатывает директивы #import.

Думайте об этом как об обеспечении "мета" компиляции для вашего кода.В этом случае есть переменная среды компилятора для iPhone 3.0.Если эта переменная присутствует, первые две строки кода компилируются.Если нет, вторые два делают.

Гораздо больше информации здесь: http://en.wikipedia.org/wiki/C_preprocessor

2 голосов
/ 28 апреля 2011

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

В вашем примере первый блок кода (между #if и #else) компилируется, если код компилируется для iOS 3.0 (или более поздней версии). В противном случае используется второй блок кода.

Обратите внимание, что это происходит во время компиляции , а НЕ run времени. Таким образом, описанная выше техника более полезна для кода, который используется в нескольких проектах.

Если вы ищете информацию о «директивах препроцессора», вы должны найти гораздо больше информации.

1 голос
/ 28 апреля 2011

Это директивы компилятора , в частности условные выражения .Они приводят к тому, что ваш код компилируется по-разному в зависимости от среды на момент компиляции.

Для получения дополнительной информации об условных выражениях и других директивах компилятора обратитесь к этой странице об условных обозначениях в препроцессоре C , которые работают одинаково как для C, так и для Objective-C.

Помните, что они вступают в игру только во время компиляции.Если вы скомпилируете этот код в его конфигурации iPhone 3.0, программа не будет ощущать во время выполнения, что вы запускаете его на iPhone 4. Вам придется перенастроить исходный код так, чтобы __IPHONE_3_0 не был определен, а затем скомпилироватьпрограмма снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...