单头文件 NimbusKitBasics.h
设计为可以放入任何源代码或库中。在其中,您将会发现许多应用程序开发的实用功能。
只需将 NimbusKitBasics.h
从 src
目录拖到您的项目中,并导入它。
#import "NimbusKitBasics.h"
以下编译器功能使得在设计和开发 Objective-C 软件时能够表达得更加丰富。
NI_DEPRECATED_METHOD(msg)
来废弃类中的某个方法,并通过消息解释建议的替代方法。NI_DESIGNATED_INITIALIZER
来强制正确的初始化器链。NS_REQUIRES_SUPER
在子类覆盖重要方法时强制调用基类。编译器功能的示例使用
@interface SomeClass
- (instancetype)initWithArg:(id)arg NI_DESIGNATED_INITIALIZER;
- (void)someMethod;
- (void)someDeprecatedMethod NI_DEPRECATED_METHOD("use someMethod instead");
@end
@interface SomeClass (Subclassing)
- (void)someMethodToBeOverwritten NS_REQUIRES_SUPER; // Ensures child implementations call super.
@end
仅类别的编译单元可能需要 -all_load
和 -force_load
链接器标志,因为应用程序在没有这些标志的情况下不会加载仅类别的单元。
为了解决这个问题,您可以在 .m
文件中提供一个空类实现。例如
@interface BogusClass
@end
@implementation BogusClass
@end
@implementation UIViewController (MyCustomCategory)
...
@end
MyCustomCategory
现在将按预期链接,多亏了包含在同一线程单元内的 BogusClass。
NI_FIX_CATEGORY_BUG(name)
是一个宏,您只需在您的类别仅 .m
文件中包含一次,这可以避免为每个编译单元编写一个虚假类。提供的名称必须全局唯一,以避免在链接时产生重复符号错误。
NI_FIX_CATEGORY_BUG(UIViewController_MyCustomCategory);
@implementation UIViewController (MyCustomCategory)
...
@end
这里提供的调试工具允许进行仅在调试构建时的审查和日志记录。如果您需要生产环境断言,则应使用标准的 NSAssert
。
特别注意
所有这些宏只有在定义了
DEBUG
宏时才会进行操作。启用调试工具的建议方式是在您的应用程序调试目标的“预处理器宏”字段中指定 DEBUG。小心不要为您的发布或应用商店构建设置此值,因为这将启用可能导致您的应用程序被拒绝的代码。
调试断言是一种轻量级的“健康检查”。它们不会使应用程序崩溃,也不会包含在发布构建中。在调试时,它们会中断应用程序的执行(就像一个有条件的断点一样),以便您可以检查导致失败的值。
NI_DASSERT(statement);
如果statement
为假,则将语句写入日志,如果附加了调试器,则应用程序将在断言行上断开。
NI_DPRINT(@"formatted log text %d", param1);
将给定的格式化文本打印到日志中。
NI_DPRINTMETHODNAME();
将当前方法名称打印到日志中。
NI_DCONDITIONLOG(statement, @"formatted log text %d", param1);
如果statement
为YES,则将给定的格式化文本打印到日志中。这实际上是NI_DASSERT和NI_DPRINT的组合。
Nimbus提供了RGBCOLOR和RGBACOLOR宏,可以轻松创建具有字节和十六进制值的UIColor对象。
UIColor* color = NI_RGBCOLOR(255, 128, 64); // Fully opaque orange
UIColor* color = NI_HEXCOLOR(0xFF8040);
UIColor* color = NI_RGBACOLOR(255, 128, 64, 0.5); // Orange with 50% transparency
UIColor* color = NI_HEXACOLOR(0xFF8040, 0.5);
NIIsPad()
在iPad上返回YES。NIIsPhone()
在iPhone和iPod touch上返回YES。NIScreenScale()
返回主屏幕的缩放比例。NIIsRetina()
如果主屏幕具有Retina显示屏,则返回YES。NITintColorForViewWithFallback(view, fallbackColor)
是一个适用于iOS 7之前的获取视图的着色颜色机制,在旧设备上使用fallbackColor。NI_IOS宏与其__IPHONE_对应项并行定义,作为检查__IPHONE_OS_VERSION_MAX_ALLOWED的一致方法。
例如
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= NIIOS_3_2
// This code will only compile on versions >= iOS 3.2
#endif
我们都希望使用tgmath.h,因为它的类型通用方法很漂亮,但由于Xcode新模块功能实现中的一个错误,您必须选择一个或另一个。相关的open radar。
在此期间,所有标准数学函数都已显式映射到当导入NimbusKitBasics时使用tgmath等效项。苹果可能会修复模块/tgmath的bug,届时您可以通过在项目的前处理器宏中定义NI_DISABLE_GENERIC_MATH
来禁用NimbusKit Basics的重新映射。
错误修复。
使用标准数学函数名称进行32/64位数学(感谢steipete指出此问题:指出这一点!)。
由于API更改而提升版本号,尽管这是一个相当小的更改。
32/64位数学!
初始发布。包含
Basics是从Nimbus 1.2.0中提取并裁剪出来的,由Jeff Verkoeyen (featherless)完成。
你可以成为第一个!现在发起一个pull request。
NimbusKit的Basics在BSD三条款许可证下发布。如需更宽松的许可证(无版权声明重新分发等),请联系Jeff以获取价格,邮箱:[email protected]。