1

I came across this code and I was wondering if the #ifdef check is redundant.

UIButton *doneButton = [[UIButton alloc] init];
...

#ifdef __IPHONE_7_0
    if([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])
        [doneButton setContentEdgeInsets:UIEdgeInsetsMake(0, 12, 0, -12)];
#endif

I tried removing it and running it in iOS 6 and it ran fine. Is there some special case I need to be aware of in iOS 6/7 that causes it to not trigger or causes crashes?

4

2 回答 2

3

#ifdef 是一个编译时指令。如果项目是针对 iOS 7 SDK 构建的,它将导致 #ifdef 和 #endif 之间的代码被编译。如果您针对 iOS 6 SDK 构建,则根本不会编译代码。

如果内部代码使用仅在 iOS 7 SDK 中定义的符号,#ifdef 将防止编译器错误。在您发布的代码中,我不确定它在做什么。setContentEdgeInsets 代码适用于大多数 iOS 版本。我认为代码应该检查 self 是否响应 setEdgesForExtendedLayout,如果确实响应,则调用 setEdgesForExtendedLayout。

于 2013-12-29T23:38:27.177 回答
1

#ifdef是多余的。此外,根据__IPHONE_7_0定义的方式,它可能会导致您的应用程序停止在 iOS 8 上运行。只需将其删除即可。

于 2013-12-29T23:36:38.800 回答