202 阅读1分钟

编译器常量宏

//值等于Deployment Target,检查支持的[最小系统]
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 150000
  //you can use iOS 15 APIs here because the SDK supports them
  //but the code may still crash if run on an iOS 14 device
#else
  //this code can’t use iOS 15 APIs as the SDK version doesn’t support them
#endif

//这些编译期常量, 对运行时的环境判断完全无效, 它告诉编译器用哪一段代码来进行编译
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 150000
if(@available(iOS 15.0,*)){
[UITableView appearance].sectionHeaderTopPadding = 0;
}
#endif

信号量宏

#ifndef TG_LOCK
#define TG_LOCK(lock) dispatch_semaphore_wait(lock, DISPATCH_TIME_FOREVER);
#endif

#ifndef TG_UNLOCK
#define TG_UNLOCK(lock) dispatch_semaphore_signal(lock);
#endif

// 信号量
#define TGExtensionSemaphoreCreate \
extern dispatch_semaphore_t tg_signalSemaphore; \
extern dispatch_once_t mje_onceTokenSemaphore; \
dispatch_once(&mje_onceTokenSemaphore, ^{ \
tg_signalSemaphore = dispatch_semaphore_create(1); \
});

API废弃宏

**NS_AVAILABLE_IOS(5_0) **

  • 这个方法可以在iOS5.0及以后的版本中使用,如果在比5.0更老的版本中调用这个方法,就会引起崩溃。

  • NS_AVAILABLE(_mac, _ios)

  • _mac 表示mac上允许的版本

  • _ios 表示支持iOS的版本

  • NS_DEPRECATED_IOS(2_0, 6_0) 这个宏中有两个版本号。前面一个表明了这个方法被引入时的iOS版本,后面一个表明它被废弃时的iOS版本。被废弃并不是指这个方法就不存在了,只是意味着我们应当开始考虑将相关代码迁移到新的API上去了。

  • NS_AVAILABLE(10_8, 6_0) 这个宏告诉我们这方法分别随Mac OS 10.8和iOS 6.0被引入。

  • **NS_DEPRECATED(10_0, 10_6, 2_0, 4_0) 定义如下:**NS_DEPRECATED(_macIntro, _macDep, _iosIntro, _iosDep, ...)

这个方法随Mac OS 10.0和iOS 2.0被引入,在Mac OS 10.6和iOS 4.0后被废弃。

  • NS_CLASS_AVAILABLE(10_11, 9_0) 这个类分别随Mac OS 10.11和iOS9.0被引入。

  • NS_ENUM_AVAILABLE(10_11, 9_0) 这个枚举分别随Mac OS 10.11和iOS9.0被引入

#define TGExtensionDeprecated(instead) NS_DEPRECATED(2_0, 2_0, 2_0, 2_0, instead)

日志输出

// 日志输出
#ifdef DEBUG
#define TGExtensionLog(...) NSLog(__VA_ARGS__)
#else
#define TGExtensionLog(...)
#endif