文章转载自http://www.jianshu.com/p/7e92471c9b90
分类是一种很好的扩展类的方式,我们学习分类的时候会学到一点:分类不能声明成员变量深入浅出理解分类(category)和类扩展(extension),但是在我们的实际运用中,有的时候确实需要一个全局变量供各个不同的方法间传值调用,那么分类中一定不能声明成员变量了么?
其实我们可以在分类中声明成员变量,不过要添加一些代码,下面让我们来添加试试看。
本文受到文章iOS分类中通过runtime添加动态属性启发,提供一下比较适合新手的添加方式以及原因。
1.首先让我们定义一个类Children和Children类的分类Children_eat,我们假设这样一个场景,家里有两个小朋友,他们午饭要吃大虾,每个人有10只大虾,吃完午饭后要告诉妈妈他们吃了几只。
2.我们知道Children_eat类中要有两个方法,a.-(void)eatShrimp b.-(void)tellMother,这个时候我们需要一个变量大虾Shrimp,它不能是一个static变量,因为每个小朋友十个虾,而不是共有十个虾,不能共用变量。
3.在头文件中我们定义一个assign型的成员变量shrimp,两个方法,eatShrimp和tellMother.
4.在.m文件中,首先添加头文件,第二步为变量配置固定地址,这里有很多种写法,有兴趣可以百度一下。
5.下面让我们来使用这个变量,看看他能否真的被使用。
5.1首先来写eatShrimp方法和tellMother方法的实现。
5.2我们在main函数中写一个例子,假设两个孩子,Allen和Mike一起吃中饭。
5.3让我们看一下结果,可以看出来shrimp这个成员变量被操作了。
6.我们再试着定义一个NSString类型的变量str,看看它和int型的写法有什么不同。下面实现中添加一行使用str。
7.让我们运行一下
8.现在我们可以方便的使用分类来拓展类,并且可以定义变量来使用了~