在Objective-C和iOS中整合项目范围定义的最佳实践

Ale*_*lec 3 iphone xcode objective-c ios

在我的情况下,我有一个高度定制的iPhone应用程序与所有自定义视图.我想利用iPhone 5的屏幕尺寸,但我的视图需要精确的布局,并且在我的视图上设置autoresizingMask是不够的.

我希望在每个源文件中都有一些项目范围的定义标志,我需要在运行时设置这个定义/标志.在我的具体情况下,我可能会导入一些头文件定义,如下所示:

if ( IS_IPHONE_5 ) {

/* 
   Set appropriate frames for the additional screen space
*/
}

else {

/* 
  Set views otherwise
*/
}
Run Code Online (Sandbox Code Playgroud)

这个问题不是完全主观的 - 它可以适用于任何想要设置和检索项目范围定义的人.也许另一种情况可能是颜色主题或可以在设置中更改的东西.

如何在程序执行时设置这些定义,如何将它们合并到源文件中?

谢谢.

Car*_*zey 7

它可以像将宏放入应用程序的APPNAME_prefix.pch文件一样简单:

#define IS_IPHONE_5 ([[UIScreen mainScreen]bounds].size.height == 568)
Run Code Online (Sandbox Code Playgroud)

应用程序中的每个文件都可以使用它.

作为一个替代建议,我认为我的偏好是添加一个类别UIDevice,也许还为了方便添加一个宏,然后只有需要它的对象(即视图中的对象和负责布局的控制器层)导入它,以避免模型耦合UIKit.

例如,UIDevice+iPhone5.h:

#define IS_IPHONE_5 [[UIDevice currentDevice] isIPhone5]

@interace UIDevice (iPhone5)

- (BOOL)isIPhone5;

@end
Run Code Online (Sandbox Code Playgroud)

并且UIDevice+iPhone5.m:

@implementation UIDevice(iPhone5Checking)

- (BOOL)isIPhone5
{
     return ([[UIScreen mainScreen]bounds].size.height == 568); //or however else you want to check
}

@end
Run Code Online (Sandbox Code Playgroud)

最适合您的需求.希望这可以帮助!