欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

iOS开发#pragma预处理指令

程序员文章站 2022-05-04 23:33:31
...
  • 1 #pragma 预处理指令

在C/C++标准中,#pragma是一条预处理的指令(preprocessor directive)。简单地说,#pragma是用来向编译器传达语言标准以外的一些信息。
在你的 @implementation 中使用 #pragma mark 来将代码分割成逻辑区块。这些逻辑区块不仅仅使得阅读代码本身容易许多,也为Xcode源导航增加了视觉线索(#pragma mark 声明前有一个水平分割并由破折号(-)开始)。如下:

#pragma mark - UITableViewDelegate  
  • 2 #pragma clang diagnostic clang诊断设置

在iOS开发中,clang diagnostic(clang 诊断设置) 是#pragma的常用命令:

#pragma clang diagnostic push  
#pragma clang diagnostic ignored "-相关命令"  
    // 你自己的代码  
#pragma clang diagnostic pop 

-相关命令

  • 3 自定义警告Warning 或error

两种强制警告的方法在视觉效果上结果是一样的,但是警告类型略有不同,一个是-W#pragma-messages,另一个是-W#warnings。对于第二种写法,把warning换成error,可以强制使编译失败。比如在发布一些需要API Key之类的类库时,可以使用这个方法来提示别的开发者别忘了输入必要的信息。

#pragma message "Warning" 
#warning "Warning 2" 
#error "Something wrong"

了解更多谈谈Objective-C的警告

下面来点黑科技(然并卵)

  • 屏蔽方法废弃警告
#pragma clang diagnostic push    
#pragma clang diagnostic ignored "-Wdeprecated-declarations"        
[TestFlight setDeviceIdentifier:[[UIDevice currentDevice] uniqueIdentifier]];    
#pragma clang diagnostic pop  
  • 屏蔽不兼容指针类型警告
#pragma clang diagnostic push     
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"    
      //code
#pragma clang diagnostic pop  
  • 屏蔽循环引用警告
// completionBlock是手动杀了AFURLConnectionOperation打破保留周期。
// completionBlock is manually nilled out in AFURLConnectionOperation to break the retain cycle.    
#pragma clang diagnostic push    
#pragma clang diagnostic ignored "-Warc-retain-cycles"   
    self.completionBlock = ^ {    
        ...    
    };    
#pragma clang diagnostic pop  
  • 屏蔽未使用变量警告
#pragma clang diagnostic push     
#pragma clang diagnostic ignored "-Wunused-variable"    
    int a;     
#pragma clang diagnostic pop  

转自

关于#pragma
#pragma 处理警告
XCode启用/关闭Clang Warnings
结束