进行iOS开发已经很久了,但是一直没有静下心研究Git上一些大神写的优秀工程。现在下定决心开始从零开始,仔细研读并敲写一遍大神工程。首先我准备研究的是 ibireme 大神的YYKit工程。这个工程比较庞大。而且这是ibireme大神在零散时间敲出的高质量代码。向大神致敬。

其中包含:

下面附上大神的一句话,与君共勉。

“我花费了大量的时间阅读和学习各种开源的代码、研究其中的实现原理、尝试自己实现相关技术、尝试在工作中使用,这使得我在 iOS 开发技术上进步很快。自学能力是很重要的。主动去研究一些优秀的开源项目、多在工作中实践和学习,这样就能逐步提升个人技术水平了。”                                  ——— ibireme

一、YYCategories结构

现在是最开始,我首先模仿的是YYCategories这个类库。首先先了解下这个类库的结构。

它由外面的YYCategories头文件、YYCategoriesMacro宏和三大类扩展类组成。下面的三类都是基于里面的扩展类所属的类组成。

(1)YYCategories.h类

这个类是库的头文件。它导入了所有的扩展类。使用的时候只要导入本文件就可使用所有扩展。

(2)YYCategoriesMacro.h类

这个类看名字是宏定义类。

(3)Foundation

这里面包含了这些文件。是对这些文件的扩展。下面会一一使用学习。

(4)UIKit

这里面包含了这些文件。是对这些文件的扩展。下面会一一使用学习。

(5)Quartz

这里面包含了这些文件。是对这些文件的扩展。下面会一一使用学习。

二、 YYCategories.h

原本我以为这个头文件类不会有什么知识点可以get到。结果我还是小瞧了大神的代码。

tip1:#if __has_include()  判断文件是否存在,再导入使用,避免文件不存在的情况;

在工程中,我们常常需要导入一些文件,但是万一什么时候删掉了工程又太大,工程报错。这不就很难找吗。这就有了这个系统宏定义。他首先可以使我们判断这个文件是否存在再导入。就像下面的代码。此宏传入一个你想引入文件的名称作为参数,如果该文件能够被引入则返回1,否则返回0。

#if __has_include()# include

#elif __has_include()# include

#else# error"Insane system"

#endif

而且他还有其他功能。就是判断是否导入的是framework来决定导入时选用<>还是""。如下代码:

#if __has_include()#import

#import

#else

#import "NSObject+YYModel.h"

#import "YYClassInfo.h"

#endif

这样做可以提高编译效率.如果指定文件路径,则搜索的更快一些.

一般我们使用YYCategories导入的时候都是库文件,所以指定目录位置搜索更快一些

#import < >引用系统文件,它用于对系统自带的头文件的引用,编译器会在系统文件目录下去查找该文件.#import " " 用户自定义的文件用双引号引用,编译器首先会在用户目录下查找,然后到安装目录中查

tip2: FOUNDATION_EXPORT

这个是一个宏定义的标志,和#define一样。

在YYCategories中定义了但是没有用到。

使用方法:

.h文件中:

FOUNDATION_EXPORT NSString* constkTestString;

.m文件中:

NSString* const kTestString = @"Test";

功能类似于:#define kTestString @"Test";

优点:

由于过多的宏定义会产生过多的二进制文件,故如果宏定义比较多,建议用FOUNDATION_EXPORT。而且FOUNDATION_EXPORT效率更高,速度较快。

原因:

FOUNDATION_EXPORT直接使用

stringInstance == MyFirstConstant来比较,比较的是指针地址

define使用

[stringInstance isEqualToString:MyFirstConstant]

比较字符串的每一个字符是否相等

FOUNDATION_EXPORT效率更高

出处大神git_iOS---学习研究大牛Git高星项目YYCategories(一)相关推荐

  1. iOS---学习研究大牛Git高星项目YYCategories(三)

    转载请注明出处!!! 本文是接着上一篇博客iOS---学习研究大牛Git高星项目YYCategories(二) 大神果真是大神,一个简单的宏定义类,就有如此多的需要注意的地方.在一篇文章中写篇幅过长就 ...

  2. iOS---学习研究大牛Git高星项目YYCategories(二)

    转载请注明出处. 本文是接着上一篇博客iOS---学习研究大牛Git高星项目YYCategories(一) 三.YYCategoriesMacro.h 一个宏定义类,我会把这一块的功能说一下. tip ...

  3. iOS---学习研究大牛Git高星项目YYCategories(一)

    转载请注明出处!!!  进行iOS开发已经很久了,但是一直没有静下心研究Git上一些大神写的优秀工程.现在下定决心开始从零开始,仔细研读并敲写一遍大神工程.首先我准备研究的是 ibireme 大神的Y ...

  4. iOS---学习研究大牛Git高星项目YYCategories(四)

    今天开始研究YYCategories的Foundation扩展类. 它包含了作者对14个Foundation框架的扩展.在详细研究每一个扩展类前我发现了一个小知识点. NS_ASSUME_NONNUL ...

  5. 25天Maya大神综合学习包「教程 软件 模型库」!月薪5万不是梦

    Maya是美国Autodesk公司出品的世界顶级的三维动画软件,应用对象是专业的影视广告,角色动画,电影特技等.Maya功能完善,工作灵活,易学易用,制作效率极高,渲染真实感极强,是电影级别的高端制作 ...

  6. Git学习系列之Git基本操作提交项目(图文详解)

    前面博客 Git学习系列之Git基本操作克隆项目(图文详解) 然后可以 cd 切换到 LispGentleIntro 目录, 新增或者修改某些文件.这里只是模拟一下操作, 实际情况可能是 使用 Ecl ...

  7. 年度盘点!必看AI顶会论文、Github高星项目大合集(附链接)

    目前,国外计算机界评价学术水平主要是看在顶级学术会议上发表的论文,特别是在机器学习.计算机视觉和人工智能领域,顶级会议才是王道.本期我们盘点了2019年人工智能领域的顶会,如最核心的顶会AAAI.IJ ...

  8. 独家 | 年度盘点!必看AI顶会论文、Github高星项目大合集(附链接)

    目前,国外计算机界评价学术水平主要是看在顶级学术会议上发表的论文,特别是在机器学习.计算机视觉和人工智能领域,顶级会议才是王道.本期我们盘点了2019年人工智能领域的顶会,如最核心的顶会AAAI.IJ ...

  9. 求大神带我研究MX模式邮件发送

    本人了解邮件已经几个月了,因为没有接触过学习过这个行业,想找一个师傅有偿学习.有兴趣的大神可以联系我!深谢!

最新文章

  1. 干货|了解机器学习常用数据预处理
  2. 获取浏览器窗口宽高问题总结
  3. docker 发布tomcat项目_Docker部署java项目[tomcat环境]
  4. 如何在keil下实现单工程多目标的设置(选择性自动编译)
  5. 大数据:Parquet文件存储格式
  6. 不用+、-、×、÷数字运算符做加法
  7. ActivityMQ使用
  8. 个人成长(学习方法)
  9. 安装Oracle中文乱码
  10. 文字栅格化剪切蒙版——创建文字遮罩效果的两种方法——梦幻游乐园
  11. 关于AMD 245支持DDR3内存的问题
  12. Web服务器及性能优化
  13. U3D常用介绍,搭建一个简单的三维效果
  14. 电脑如何设置定时任务、定时执行 —— 不用Windows任务计划程序,也能轻松设定计划任务、定时任务 —— 定时执行专家
  15. Malformed \uxxxx encoding问题的多种完美解决方法总结
  16. C语言 第六章 多重循环
  17. iOS MP3流媒体播放 边缓冲边播放 FreeStreamer框架
  18. 【2021中国科创好公司】评选榜单重磅发布!常垒资本投资“威努特”和“捷配”入选!...
  19. ADODB类库——数据库管家(一)
  20. MATLAB程序设计与应用(第三版)刘卫国 答案(一)

热门文章

  1. 网页编辑器的快捷键及常用操作
  2. linux 超级终端
  3. 毕业两年的大专生程序员工作总结(java后端)
  4. 南方基金-系统开发工程师-一面二面
  5. Build:failed
  6. linux amba机制,AMBA仲裁器仲裁机制
  7. thinkphp Mysql MATCH() AGAINST() 的用法和 写法
  8. web渗透—暴力破解
  9. 【前端学习笔记 CSS系列二十二】justify
  10. 有没有测试游戏天赋的软件,测测你的电竞天赋-测测你的电竞天赋有多高小游戏v1.0...