NimbusKit-Basics 1.2.1

NimbusKit-Basics 1.2.1

测试已测试
语言语言 Obj-CObjective C
许可证 BSD
发布最后发布2014年12月

Jeff Verkoeyen 维护。



单头文件 NimbusKitBasics.h 设计为可以放入任何源代码或库中。在其中,您将会发现许多应用程序开发的实用功能。

添加到您的项目中

只需将 NimbusKitBasics.hsrc 目录拖到您的项目中,并导入它。

#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 标志

仅类别的编译单元可能需要 -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。

SDK可用性

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

32/64位数学

我们都希望使用tgmath.h,因为它的类型通用方法很漂亮,但由于Xcode新模块功能实现中的一个错误,您必须选择一个或另一个。相关的open radar

在此期间,所有标准数学函数都已显式映射到当导入NimbusKitBasics时使用tgmath等效项。苹果可能会修复模块/tgmath的bug,届时您可以通过在项目的前处理器宏中定义NI_DISABLE_GENERIC_MATH来禁用NimbusKit Basics的重新映射。

版本历史

1.2.1 于2014年4月30日

错误修复。

  • 添加缺少的UIKit导入。
  • 其他文档更新。

1.2.0 于2014年4月30日

使用标准数学函数名称进行32/64位数学(感谢steipete指出此问题:指出这一点!)。

由于API更改而提升版本号,尽管这是一个相当小的更改。

1.1.0 于2014年4月30日

32/64位数学!

  • 现在在运行单元测试时自动禁用NI_DASSERT。

1.0.0 于2014年4月29日

初始发布。包含

  • 编译器功能。
  • 调试工具。
  • 运行时检查。
  • iOS SDK版本。

鸣谢

Basics是从Nimbus 1.2.0中提取并裁剪出来的,由Jeff Verkoeyen (featherless)完成。

贡献者

你可以成为第一个!现在发起一个pull request

许可证

NimbusKit的Basics在BSD三条款许可证下发布。如需更宽松的许可证(无版权声明重新分发等),请联系Jeff以获取价格,邮箱:[email protected]