美文网首页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)

    分类是一种很好的扩展类的方式,我们学习分类的时候会学到一点:分类不能声明成员变量深入浅出理解分类(category...

  • 关联属性

    分类中不可以添加成员变量 分类中可以声明属性,分类中声明属性只会生成方法的声明,但不会生成成员变量和方法的实现。 ...

  • iOS开发 runtime应用

    1.runtime的作用 字典转模型 动态修改成员变量 方法交换 给分类添加属性 2.字典转模型 原文参考链接:h...

  • 成员变量和局部变量的区别

    1.在类中的位置不同: 成员变量:声明在内中,方法外; 局部变量:声明在方法内; 2.在内存中的位置不同 成员变量...

  • 分类和扩展的区别

    分类只能扩展方法,不能扩展属性和实例变量,如果包含成员变量会直接报错! 如果分类中声明了一个属性,那么分类中只会生...

  • 0923Java笔记ヾ(o・ω・)ノ

    成员变量和局部变量的区别 A:在类中的位置不同 成员变量:在类中方法外 局部变量:在方法定义中或者方法声明...

  • Runtime的定义

    runtime基本作用 在程序运行过程中,动态的创建类,动态添加、修改这个类的方法和属性 遍历一个类的所有成员变量...

  • iOS分类(类别)的注意点

    1.分类只能增加方法(包括类方法和对象方法),不能增加成员变量 2.在分类方法的实现中可以访问原来类中的成员变量;...

  • 6-关联对象

    属性 在类中声明一个属性会生成成员变量并声明和实现对应的set,get方法 在分类中声明一个属性只会声明对应的se...

  • 关联对象

    分类里面添加成员变量, 分类里面是不能直接添加成员变量的,但是可以通过runtime间接添加成员变量。 为什么...

网友评论

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

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