iOS常用宏记录收集

序号 作用
1 TARGET_IPHONE_SIMULATOR 判断是否是模拟器
2 NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END 中间的都不能为空
3 NS_DESIGNED_INITIALIZER 其他的初始化方法都必须要调用此方法
4 NS_UNAVAILABLE 禁用修饰的初始化方法
5 if __has_include 通过宏定义判断是否引入的是framework,反之则使用双引号
6 FOUNDATION_EXPORT 定义常量,类似Define
1、TARGET_IPHONE_SIMULATOR 判断是否是模拟器
#ifdef TARGET_IPHONE_SIMULATOR

XXXXX  模拟器时会编译的代码

#else

XXXXX  不是模拟器才会编译的代码

#endif
2、NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END 中间的都不能为空

__nullable && ___nonnull
__nullable指代对象可以为NULL或者为NIL
__nonnull指代对象不能为null
当我们不遵循这一规则时,编译器就会给出警告。

在NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END中间修饰的属性都不能为空

参考链接://www.greatytc.com/p/b3a31eed945f

3、NS_DESIGNED_INITIALIZER 其他的初始化方法都必须要调用此方法进行最后的初始化
init方法调用顺序

参考链接://www.greatytc.com/p/5654942cd8f7

4、NS_UNAVAILABLE 禁用修饰的初始化方法

在初始化必须传入某个参数化的时候,修饰其他的初始化方法

+ (instancetype)new NS_UNAVAILABLE;
- (instancetype)init NS_UNAVAILABLE; ///< 直接标记 init 方法不可用
- (instancetype)initWithUserID:(NSNumber *)userID;/// 相当于只能用此方法来初始化

参考链接://www.greatytc.com/p/5654942cd8f7

5、if __has_include 通过宏定义判断是否引入的是framework,反之则使用双引号
#if __has_include(<TestHead/TestHead.h>)
      #import <TestHead/TestHead.h>
#else
      #import "TestHead.h"
#endif
6、FOUNDATION_EXPORT 定义常量

.h文件

FOUNDATION_EXPORT  NSString *const kMyConstantString;

.m文件是这样定义的

 NSString *const kMyConstantString = @"hello world";

另一种就是常用的#define 方法定义常量了

#define kMyConstantString @"Hello"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在我们的工程中,很多时候只希望在满足一定条件的时候才进行编译,这是就需要用到条件编译。 #if #elif #el...
    JerryLMJ阅读 10,241评论 0 14
  • iOS开发过程中,使用的一些常用宏定义 字符串是否为空#define kStringIsEmpty(str) ([...
    goyohol阅读 5,397评论 30 85
  • 来源于CocoaChina 在工作中, 很多小伙伴都会在PCH文件定义一些常用的宏,但是又怕写这些简单的宏浪费时间...
    iOS学末阅读 832评论 3 7
  • 原文链接://www.greatytc.com/p/213b3b96cafe 在工作中, 很多小伙伴都会在...
    为了你而活阅读 443评论 0 3
  • 前言: 在工作中, 很多小伙伴都会在PCH文件定义一些常用的宏,但是又怕写这些简单的宏浪费时间,又有时候忘记怎么定...
    sherry155阅读 482评论 0 0