Objective-C基础将来跳槽用

谈谈Category和Extension

2016-07-18  本文已影响1271人  夜3033

开篇

在平时的项目中时常可以用到Category,在研究别人的代码时遇见Category和Extension也是一件极其平常的事情。还记得当我第一次见到这种写法的时候我的内心是崩溃的。


示例1.png

一串的"+"号,这是什么鬼简直颠覆我的三观好么,完全的一头雾水,经过慢慢的研究才发现了他的好处,原来还可以这样玩,不错不错。但是接着又发现一个问题Extension是什么呢,持续的懵逼中...今天我们就来谈谈Category和Extension 究竟有何神奇之处。

效果简单展示

AppDelegate_m.png AppDelegate_m 2.png

我们来看一下上面的两张appdelegate.m的内容,两个简单的小工程中,一个的内容中有上百行甚至几百行的代码,另一个却只有几行,我们先不说Category的别的功能单单是代码的分块,清晰条理和代码的可读性上就值得我们研究一番更何况他不止于此呢。

创建方法

既然那么好用我们怎么创建他呢,话不多说上图片。


创建1.png 创建2.png

原理

Category

Extension

他们的主要区别是:

1、形式上来看,extension是匿名的category。
2、extension里声明的方法需要在mainimplementation中实现,category不强制要求。
3、extension可以添加属性(变量),category不可以。

使用举例

个人感觉在项目中Category的使用还是比较多的现在举个简单的代码例子

UIButton_GSbutton_h.png

在工程中创建两个Category的分类,一个是UIButton的一个是appdelegate的。在.h文件中按钮的类暴露的方法如图所示。我们在.m中实现它,如下图

UIButton_GSbutton_m.png

类的方法实现之后我们导入类名,来调用方法。

按钮创建.png

我们直接调用我们自己创建的方法,给予他设置名称和已经确定的名称颜色和背景,在大规模使用中可以减少我们的代码量。
同样的道理我们也可以在appdelegate中创建分类,实现自己想要的功能实现代码的分块。

AppDelegate_GSCategory_h.png

同时通过图中划线的方法我们可以获取函数中的相应参数,以供相应的方法中使用,比如极光推送需要的application和launchoptions ,然后在.m文件中实现自己需要的方法就可以对代码进行分块了。

AppDelegate_m.png

这个图为appdelegate中使用Category以后的代码形式,是不是简洁了许多。

后记

文中的内容仅仅是自己的一点想法,有错误的地方谢谢各位的指出,以后有时间会继续分享一些Category和Extension的认识。

上一篇 下一篇

猜你喜欢

热点阅读