在iPhone/iPad上正确使用宏#define

She*_*eni 2 iphone macros xcode objective-c ipad

我一直在阅读有关在iOS中使用#define宏的相互矛盾的信息,以及它们是仅在编译时运行还是在运行时运行.

考虑我的情况:我想定义一个返回BOOL的宏,该BOOL与屏幕是大尺寸还是小尺寸有关,这里是代码:

#define TTThisScreenWidth [[UIScreen mainScreen] bounds].size.width
#define TTLargeScreenTrushHold 700.0f
#define TTScreenIsOfLargeSize (TTThisScreenWidth > TTLargeScreenTrushHold)
Run Code Online (Sandbox Code Playgroud)

问题:如果此代码仅在编译时运行,则屏幕大小将在编译到的设备上修复,并且在具有不同屏幕的设备上运行时不返回正确的答案.

但是:我检查了它,它在iPad上完美运行,最初编译为iPhone(通用应用程序)

所以:不安全吗?

谢谢!

das*_*ght 5

宏在编译时被替换 ; 它们不在编译时运行.宏的主体将被"粘贴"以代替对宏名称的引用,就像您手动键入它一样.

通常,编译器将在编译时评估常量表达式,包括或不包含宏.您TTThisScreenWidth不涉及常量表达式 - 它是一个运行时表达式,因此它在运行时进行评估.