2013-05-08 2 views
-2
#define IS_4_INCH ([[UIScreen mainScreen] bounds].size.height == 568) 

Над IS_4_INCH имеет true, когда я запускаю приложение в 4-дюймовом симуляторе. Как директива препроцессора, как она определяет среду выполнения.Как препроцессор определяет операторы, способные оценивать среду выполнения для симулятора?

В ближайшее время я переведу это метод класса. Но подумал, чтобы понять, как это заявление работает.

Пожалуйста, помогите.

Спасибо.

+0

http://en.wikipedia.org/wiki/C_preprocessor –

ответ

2

Препроцессор в основном это строка замены (это может быть более упростив его, но для примера его хорошо).

Таким образом, каждый раз он видит IS_4_INCH он заменит его ([[UIScreen mainScreen] bounds].size.height == 568)

Так, например

if(IS_4_INCH) { 

превратится в

if(([[UIScreen mainScreen] bounds].size.height == 568)) { 

И тогда компилятор гаснет и компилирует код , Компилятор не знает, что вы написали IS_4_INCH.

0

Препроцессор будет заменен значением, которое вы определили в коде во время компиляции. Он не будет хранить в нем никаких данных. Здесь «IS_4_INCH» будет заменен на «([[UIScreen mainScreen] bounds] .size.height == 568)« во время компиляции.

1

Препроцессор определяет только средства «замените эту строку этой другой строкой перед компиляцией». Таким образом, вызов и тест метода вставляются непосредственно в код, где появляется «IS_4_INCH». Затем вызов метода и проверка выполняются во время выполнения.

0

хотя он содержит IS в вашем #define IS_4_INCH, это не дает логическое значение после выполнения мира кода впереди,

, что это делает: все места, которые вы использовали IS_4_INCH просто заменен ([[UIScreen mainScreen] bounds].size.height == 568) ,

([[UIScreen mainScreen] bounds].size.height == 568) 

возвращает логическое значение

Смежные вопросы