我遇到了这段代码,我想知道#ifdef检查是否多余。
UIButton *doneButton = [[UIButton alloc] init];
...
#ifdef __IPHONE_7_0
if([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])
[doneButton setContentEdgeInsets:UIEdgeInsetsMake(0, 12, 0, -12)];
#endif
我尝试删除它并在iOS 6中运行它运行正常。在iOS 6/7中是否需要注意一些特殊情况导致它不会触发或导致崩溃?
答案 0 :(得分:3)
#ifdef是一个编译时指令。如果项目是针对iOS 7 SDK构建的,那么只会编译#ifdef和#endif之间的代码。如果您针对iOS 6 SDK构建,则根本不会编译代码。
如果内部代码使用仅在iOS 7 SDK中定义的符号,#ifdef将阻止编译器错误。在您发布的代码中,我不确定它在做什么。 setContentEdgeInsets代码适用于大多数iOS版本。我认为代码应检查自己是否响应setEdgesForExtendedLayout,然后如果 响应则调用setEdgesForExtendedLayout。
答案 1 :(得分:1)
#ifdef
是多余的。此外,根据__IPHONE_7_0
的定义方式,可能会导致您的应用停止在iOS 8上运行。只需将其删除即可。