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

时间:2012-09-29 17:25:48

标签: iphone objective-c ios xcode

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

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

if ( IS_IPHONE_5 ) {

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

else {

/* 
  Set views otherwise
*/
}

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

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

谢谢。

1 个答案:

答案 0 :(得分:7)

这可能就像将宏放入应用的APPNAME_prefix.pch文件一样简单:

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

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

作为另一种建议,我认为我的偏好是在UIDevice上添加一个类别,也可能为了方便起见添加一个宏,然后只有需要它的对象(即视图中的对象和负责布局的控制器层)导入它,以避免将模型耦合到UIKit

例如,UIDevice+iPhone5.h

#define IS_IPHONE_5 [[UIDevice currentDevice] isIPhone5]

@interace UIDevice (iPhone5)

- (BOOL)isIPhone5;

@end

UIDevice+iPhone5.m

@implementation UIDevice(iPhone5Checking)

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

@end

最适合您的需求。希望这有帮助!