在分类中动态声明成员变量的方法(runtime)

2017-01-14 15:49:37来源: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.

eatshrimp1.png
4.在.m文件中,首先添加头文件,第二步为变量配置固定地址,这里有很多种写法,有兴趣可以百度一下。

eatshrimp2.png
5.下面让我们来使用这个变量,看看他能否真的被使用。
5.1首先来写eatShrimp方法和tellMother方法的实现。

eatshrimp3.png
5.2我们在main函数中写一个例子,假设两个孩子,Allen和Mike一起吃中饭。

eatshrimp4.png
5.3让我们看一下结果,可以看出来shrimp这个成员变量被操作了。

eatshrimp5.png
6.我们再试着定义一个NSString类型的变量str,看看它和int型的写法有什么不同。下面实现中添加一行使用str。

eatshrimp6.png
7.让我们运行一下

eatshrimp7.png
8.现在我们可以方便的使用分类来拓展类,并且可以定义变量来使用了~


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台