首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Objective-C 中 9 种避免使用 Xcode 预处理器宏的方法

本文是Objective-C 中的代码气味系列文章中的一篇。 这是一个可以在终端运行的便捷命令。它可以检查并显示当前目录下的源文件,预处理器宏的使用情况,你应该仔细检查。...以下是一些常见的 Xcode 预处理器宏,以及如何替换它们: 1、#include 让我们从传统 C 中的一个简单例子开始: Smell #include "foo.h" 除非您提供的是平台无关的 C...,在一个实现文件中创建一个定义。...但如果将这些值作为参数传递,就需要定义一个类型名,以增加编译器检查和语义。...常量字符串通常在多个文件中共享,因此这里介绍如何在 .h 文件中声明常量: extern NSString *const JMRResponseSuccess; 因此,.m 文件中的定义是 NSString

14610
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    LLVM编译过程

    1、编译以及LLVM简介 编译器的作用便是把我们的高级编程语言(Objective-C)通过一系列的操作转化成可被计算机执行的机器语言(MachineCode)。...3、Xcode编译器发展过程 Clang 是 LLVM 的子项目,是 C、C++ 和 Objective-C 编译器,目标是替代传统编译器 GCC 。...Clang 在整个 Objective-C 编译过程中扮演了编译器前端的角色,同时也参与到了 Swift 编译过程中的 Objective-C API 映射阶段。...4.2版本; Xcode5:GCC被废弃,新的编译器是LLVM 5.0,从GCC过渡到Clang-LLVM的时代正式完成,Objective-C与swift都采用Clang作为编译器前端 4、Clang-LLVM...可以在这一层自定义Pass对IR代码做代码混淆 生成目标文件(Assemble)-后端:在这一阶段,也是汇编阶段,汇编器将上一步生成的可读的汇编代码转化为机器代码。

    2K10

    APP生成与运行(一)

    源代码一般为高阶语言 (High-level language), 如C、C++、C# 、Objective-C、Swift、Java 等,而目标语言则是汇编语言或目标机器的目标代码(Object code...),在编译过程中,前端主要负责词法和语法分析,将源代码转化为抽象语法树;优化器则是在前端的基础上,对得到的中间代码进行优化,使代码更加高效;后端则是将已经优化的中间代码转化为针对各自平台的机器代码。...dsym文件中,存储了16进制的函数地址映射。 在App实际执行的二进制文件中,是通过地址来调用方法的。...常用头文件放到预编译文件里 XCode的pch文件是预编译文件,这里的内容在执行XCode build之前就已经被预编译,并且引入到每一个.m文件里了。...这样做,可以只编译当前的版本,比如arm7/arm64等等,记得只开启Debug模式。这个选项在高版本的XCode中自动开启了。 Debug模式下,关闭编译器优化

    1.1K10

    XcodeXcode 9 的全新功能您会喜欢的工具。内建 Interface BuilderXcode IDE

    有了全新的强大重构任务,现在您能迅速地完成 Swift, Objective-C,甚至用户界面文件上的变量重命名。...全新的编辑器 重新构建后的源代码编辑器带来了惊人的速度:无论文件多大,它都可以流畅地上下滚动。...作为 Clang 编译器项目的一部分,Xcode 的本地转换引擎也将进行开源。 源代码管理和 GitHub Xcode 9 和 GitHub 更紧密整合,让源代码管理变得简单不费力。...根据您在主编辑器中执行的工作,Assistant 编辑器会自动显示 Xcode 确定为对您最有帮助的文件。...编译器 功能强大的 C、C++ 和 Objective-C 开放源 LLVM 编译器已构建在 Xcode 中,并可从“终端”获得。

    8.3K30

    从预编译的角度理解Swift与Objective-C及混编机制

    这里我们继续采用之前的例子,在 AppDelegate 中定义 readonly 为 0x01,而且这个定义的声明在 #import 语句之前,那么此时又会发生什么事情呢?...查找系统库的头文件 上面的过程让我们理解了在 Header Map 技术下,编译器是如何寻找相应的头文件的,那针对系统库的文件又是如何索引的呢?...而对于 Swift 这门语言来说,它并没有头文件的概念,对于开发者而言,这确实省去了写头文件的重复工作,但这也意味着,编译器会进行额外的操作来查找接口定义并需要持续关注接口的变化!...当然,编译器也给与了开发者自行定义 “API 外貌” 的权利,如果你对这一块感兴趣,不妨阅读笔者的另一篇文章 - WWDC20 10680 - Refine Objective-C frameworks...这就使得 Swiftinterface 的行为和源代码一样,后续版本的 Swift 编译器也能导入之前编译器创建的 Swiftinterface 文件,像使用源码的方式一样使用它。

    2.2K31

    Xcode编译疾如风系列-2.并行编译

    并行编译 Parallelize Build 在 Xcode 的 scheme 设置中,Xcode会默认勾选 ☑️ Parallelize Build。 ?...项目中的源代码,包括头文件、C、C++、Objective-C、Swift等文件,经过构建系统 LLVM 以及 Swift 编译器处理后,生成最终的app。...在整个生成 PetWall.app 过程中,我们要编译源代码、Storyboard、xcassets、链接,运行自定义 shell 脚本,代码签名等。...以编译任务为例, 它需要输入源代码文件,比如 PetController.m,然后输出目标文件 PetController.o。...同样,链接器任务,需要由编译器在上个任务中生成的目标文件再生成可执行或 lib 文件,比如 PetWall 可执行文件,最终会存到 .app 资源文件包。

    3.1K41

    采用现代Objective-C

    Xcode提供了一个工具来帮助做这些结构性的变化。但在使用这个工具之前,你想了 解工具为你的代码做了什么改变以及为什么。本文强调了一些最重要的和有用的现代 化方式可以用在你的代码中。...因为 一个id可以是任何类型的对象类,由于存在一个名为-count的方法在一些类中, 编译器可能返回一个+factoryMehtodB的实现的方法。...一个初始化一个动作并返回BOOL值的方法 一个明确改变内部状态对getter有副作用的方法 此外,考虑以下的规则集当在你的代码中定义属性时: 一个读/写属性有两个访问器方法。...这些宏在Xcode中实现可以显式地指定枚举类型和选项的大小。此外,这种由旧的编译器语法声明枚举的方式,可以被新的编译器正确评估和解释潜在的类型信息。...使用ARC工具: 选择Edit > Refactor > Convert to Objective-C ARC。这个工具转换项目中所有的文件使用ARC。

    58930

    【IOS开发高级系列】Lua与OC交互专题

    源代码可免费获取,你总是可以改动源代码,以满足自己的需要。         可以利用原生API。这意味着,为教Objective-C而编写的教程很容易由Lua for Wax来改动和编写。...如果你有一个Objective-C类是以前编写的,不需要改动,就可以将它用在Lua中——只要把它放入到Xcode。Three20之类的库也是一样。...你的文件夹看起来应该像这样: 2.2.3 设置Wax(第一部分,处理文件)         首先,下载源代码的压缩包。...AppDelegate.lua的这一行显示,还可以定义你的“类”定义哪些协议。         ...虽然waxClass解决了定义Objective-C可以使用的类这个问题,但还是存在一个问题:由于Lua没有类,它没有像Objective-C那样的动态“自”变量。

    38820

    最基本的调试是NSLog及DEBUG预处理器宏

    而且,在这个文件中的这个时刻,你现在有足够的信息来开始使用NSLog的调试您的应用程序.但是,你应该继续往下看:在本文档的剩余部分补充说,你可以使用授权您可以在您的项目更有效地使用记录更多详细信息。...此文档适用于所有iOS和OS X开发,本示例假定正在使用Xcode的读者,是熟悉的Objective-C语言,并了解使用C语言预处理程序的基础知识。...控制台输出可以出现在许多地方,包括(但不限于)Xcode和控制台应用程序,参考有关从您的应用程序的调用NSLog的找到控制台输出的更多信息,请参见技术Q&A QA1747:调试部署iOS应用 如何调用NSLog...具体地,Debug宏旨在被用于打开和关闭相关的调试中不同部分源代码.在Xcode的默认配置中,调试默认为1,发布为0.而且,你可以利用它来自动地包含额外的调试和记录代码的调试版本。...在Xcode里面的DEBUG宏 在Xcode中DEBUG定义调试模式,预编译宏可以编译DEBUG可以让你DEBUG模式运行程序。

    1.4K30

    iOS开发入门笔记

    环境准备 做iOS开发一定要有苹果的软件环境:Mac OS操作系统、Objective-C编译器、设备模拟器等,开发工具倒不一定要用Xcode,只要是个源代码编辑工具就行(vim都行,只是没Xcode那么多功能...这篇文档不讲IB,只讲Objective-C,因为: 基本上,每一本讲iOS开发的书(纸质书、电子书),都有大量的截图一步一步教如何用IB开发iOS应用,而讲Objective-C开发应用的书却没有那么多...C的超集 Objective-C扩展了ANSI C,是C的超集,也就是说: 任何C源程序,不经修改,即可通过Objective-C编译器成功编译 Objective-C源程序中可以直接使用任何C语言代码...接口定义(Interface)放在头文件中,文件扩展名是.h,实现(implementation)放在实现文件中,文件扩展名是.m(也有.mm的扩展名,表示Objective-C和C++混编的代码)。...接口定义也可以写在.m文件中,但最好不要这么干 需要注意的是,与Objective-C的interface概念最接近的是C和C++里的头文件,它与implementation是成双成对出现的,作用是声明类的成员变量和方法

    4K60

    小朋友学C语言(2):安装Dev C++编译器

    一个现代编译器的主要工作流程:源代码 (source code) -->预处理器 (preprocessor) -->编译器 (compiler) -->目标代码 (object code) -->链接器...Visual Studio极其庞大,安装文件有几个G,主要用于工业项目的开发。 所以,Win系统下推荐安装Dev C++。 苹果电脑的Mac系统下,直接用标配的Xcode编译器就行。...Xcode可以用来编写C, C++, Objective-C和Swift。 Linux系统下,可用标配的GCC编译器。Linux系统比较难学,多为专业的技术人员所用。初学者不考虑也罢。...5 安装路径可以按默认的C:\Program Files (x86)\Dev-Cpp,也可以选择其他路径 ? 6 安装中 ? 7 勾选按默认,点击“Finish”即运行Dev C++编译器 ?...4 保存路径选择第1步中创建的D:\Cprojects,文件名和保存类型按默认,点击“保存”按纽 ? 5 编写程序 ?

    2.8K70

    代码开发工具Xcode

    同时,该软件还提供了各种调试工具,包括断点、单步调试和调试控制台,可以帮助开发者快速定位和解决程序中的问题。 除了代码编辑和调试功能外,Xcode for Mac 还具有强大的构建和测试功能。...id=NzY4OTU4Jl8mMjcuMTg2LjEzLjIxNQ%3D%3D 图片 Xcode mac下载功能特色 Xcode包括Xcode IDE,Swift和Objective-C编译器,仪器分析工具...,并修复 - 它可以纠正错误 Swift是一种功能强大,现代又有趣的编程语言 •通过设计安全,Swift语法和功能可防止整个类别的错误 •快速的代码执行和编译时间由经过验证的LLVM编译器提供支持 •现代语言功能受到领先研究的启发...Builder可以轻松设计您的界面而无需代码 •故事板让您可以在应用程序中安排屏幕的完整流程 •在设计画布中查看呈现的自定义控件 •为不同的设备,屏幕尺寸和方向自定义您的界面 •StackViews可以很容易地理解界面每个部分的布局...•从GUI设计直接创建与相关源代码的连接 专业编辑器和调试器保持您的代码前端和中心 •点击几键,Open Quickly将立即打开项目中的任何文件 •消息气泡会在您的代码旁边显示错误,警告和其他问题

    1.8K10

    Xcode 10

    源代码编辑器允许您更轻松地转换或重构代码,查看源代码控制更改以及相关行,并快速获取有关上游代码差异的详细信息。您可以使用自定义可视化和数据分析构建自己的仪器。...资产目录定义资产和命名颜色。您可以在调试时将应用程序切换为暗模式。这一切都是使用Xcode中仅适用于您的应用的控件完成的。无需更改系统设置。...xcode-hero-secondary-large.png 代码就像专业版 Xcode包含一个快速的源代码编辑器。即使在编辑大量源文件时,文本滚动也非常顺畅。...Xcode中的源代码控制导航器可以让您轻松查看每个分支,标签和遥控器以及提交时间表。检查条目以查看所有受影响的文件,或双击提交以查看更改的所有内容。...与Swift 4.0相比,最新的Swift编译器可以构建大型应用程序的速度提高两倍以上。*与新的Xcode新构建系统相结合,您的日常编辑,构建和测试工作流程更快。

    3.1K20

    Swift和Objective-C混编在有赞移动的实践

    SwiftModule 可以将 Swift 解析后生成对应的 modulemap 和 umbrella.h 文件,SwiftModule 增加对编译器版本的依赖,编译产物与编译器 和 Swift 版本有关...我们在周会上和大家同步了如何将原有的 Xcode 子项目模块迁移到 development pod ,简言之分为三个部分,声明源码,声明资源文件,声明依赖和其他配置,具体 podspec 文档可以参考Cocoapods...5.1 Framework targets 不支持 Bridging-Header 通常来讲混编的时候需要在工程中创建 Swift 文件时候,Xcode 会问询是否创建 Bridging-Header...但是编译器是不允许在 Framework 中创建 Bridging-header,因此在二/三方库中,我们不能使用桥接文件的方式进行混编 Objective-C 代码的引用,需要用 Swift Module...++ 的默认后缀名,Xcode 的编译器可以识别。

    2.3K20

    唐巧的iOS技术博客选摘

    《objc非主流代码技巧》:看开源代码时,总会看到一些大神级别的代码,给人眼前一亮的感觉,多数都是被淡忘的C语言语法,作者在文章中总结了objc写码中遇到的各类非主流代码技巧和一些妙用。...《刨根问底Objective-C Runtime(1)- Self & Super》:本文通过分析clang重写的Objective-C源码,从而解释Objective-C中的self和super在编译器层面分别是如何处理的...《刨根问底Objective-C Runtime(3)- 消息 和 Category》:文章通过一道习题,利用分析Objective-C实现源代码,讲解了Objective-C的消息和Category的实现原理...作者分享了从头文件中获取到的一些信息。...另外 SpriteKit 中的 SKNode 也是继承自 UIResponder 类。因此 UIKit 中的视图、控件、视图控制器,以及我们自定义的视图及视图控制器都有响应事件的能力。

    3.3K60

    iOS开发常用之其他

    其中和Xcode关系最为直接以及最为重要的是框架中的IDEKit和IDEFoundation,以及SharedFrameworks中的DVTKit和DVTFoundation四个。...KSImageNamed - 自动完成,特别是如果你正在写Objective-C,如果Xcode能自动完成文件名难道不会很伟大吗?比如图像文件的名称。...KSHObjcUML -KSHObjcUML是一个Objective-C类引用关系图的Xcode插件。...颜色 - 打印彩色字符串,可以修改Swift中终端输出的字符串颜色,有趣的小工具。 蜡笔 - Xcode调色板增强插件。...searchcode -源代码搜索利器:来自悉尼的代码搜索引擎汇聚了Github上,到位桶,Sourceforge的......等多家开源站点超20万个项目,180亿行源代码,能以特殊字符,语言,仓库和源方式从

    1.9K20

    Xcode中和symbols有关的几个设置

    摘抄《深入理解计算机系统》里的一些描述: 一个典型的ELF可重定位目标文件包含下面几个节: ... ... .symtab:一个符号表,它存放在程序中定义和引用的函数和全局变量信息。...实际上,每个可重定位目标文件在.symtab中都有一张符号表。然而,和编译器中的符号表不同,.symtab符号表不包含局部变量的条目。...... ... .debug:一个调试符号表,其条目是程序中定义的局部变量和类型定义,程序中定义和引用的全局变量,以及原始的C源文件。只有以-g选项调用编译驱动程序时才会得到这张表。...编译器和汇编器生成从地址0开始的代码和数据节。链接器通过把每个符号定义与一个存储器位置联系起来,然后修改所有对这些符号的引用,使得它们指向这个存储器位置,从而重定位这些节。...Objective-C不会为方法定义链接符号,只会为类定义链接符号。 可以在终端中用nm命令查看一个可重定位文件或可执行文件的符号表,其中加上-a参数可以显示包括调试符号在内的所有符号。

    2K30

    iOS编译原理

    :OC不允许同一个类中两个方法有相同的名字(即使只是参数类型不同),但C++可以; 二、编译型语言与解释型语言 Objective-C属于编译型语言,这是为了保证iPhone的执行效率; 1.编译型语言...CLang基于LLVM,是一个高度模块化开发的轻量级编译器; CLang主要来自苹果电脑的支持,同时支持C、Objective-C以及C++; CLang用于替代Xcode5版本前使用的GCC,编译速度提高了...3倍: 3.理解iOS中的编译器 在iOS开发中,通常LLVM被认为是编译器的后端,而Clang是作为编译器的前端; 二者以 IR(中间代码)作为媒介,这样前后端分离,使得前后端可以独立的变化,互不影响...(@"Hello, %s", Name); return 0; } 五、预处理(Prepressing) 1.主要功能 替换宏:替换代码中各种宏定义,如定义的常量、函数等; 导入头文件:将#include...1.符号解析 将每个符号引用和对应的符号定义关联起来; 链接器链接多文件时会创建符号表,用于记录所有已经定义和未定义的符号; 出现相同符号,会报错:"ld:dumplicate symbols";

    1.6K20
    领券