美文网首页iOS程序猿iOS Developer
在分类中动态声明成员变量的方法(runtime)

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

作者: 帅裂苍穹的七爷爷 | 来源:发表于2016-10-28 10:42 被阅读545次

    分类是一种很好的扩展类的方式,我们学习分类的时候会学到一点:分类不能声明成员变量深入浅出理解分类(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.现在我们可以方便的使用分类来拓展类,并且可以定义变量来使用了~

    相关文章

      网友评论

        本文标题:在分类中动态声明成员变量的方法(runtime)

        本文链接:https://www.haomeiwen.com/subject/iwzsuttx.html