黑马程序员技术交流社区
标题:
关于重写系统自带类方法
[打印本页]
作者:
冯大卫
时间:
2014-8-31 23:31
标题:
关于重写系统自带类方法
在视频中老师会经常重写一些系统自带的方法 ,比如在讲到类的本质的时候重写了+(void)方法(这个方法是程序运行时候 加载类对象时候使用的类方法) 那么如果重写了这个方法 那么肯定也就是原来的没有重写以前的+(void)方法被覆盖了 那么应该会导致加载类对象的时候会出现错误啊 毕竟 跟原来自带的方法已经不一样 了 ,但是 看老师的视频的时候老师也没有说到这一点啊 而且 系统也运行正常啊 ??? 求解
作者:
黑马黄武先
时间:
2014-8-31 23:44
坐等大神来解答,哈哈
作者:
★彬★卍囧神
时间:
2014-9-2 19:39
没懂....+(void)方法是load?
作者:
王绍明
时间:
2014-9-2 20:15
自己写的话系统不会生成代替自己写的!自己没写的有些部分系统会自动生成!手动在系统自动生成前面
作者:
小月格子猫
时间:
2014-9-2 21:55
本帖最后由 小月格子猫 于 2014-9-2 21:58 编辑
1 我们重写方法的时候,一定要看清一个地方,就是这个方法的返回值,比如重写description这个方法,
这个方法一个是类方法,一个是对象方法,类方法,返回的是这个类的名称字符,对象方法返回的是这个
这个对象的类加对象的地址
2 确定了这个返回值之后,我们发现这个返回值,我们一点也不需要,然后呢,我们就直接重写了,这样下次在
调用的时候,就直接调用了我们重写的这个,得到了我们想要的东西,重写description方法,重写成只要一掉用 返回调用它对象的成员属性信息,3 像这种我们知道它的运行原理和返回值的方法,我们用不到的方法,是可以全部重写的
3 然后,说完这类方法,就得说相对应的另一种,如 init ,和 dealloc等方法
4 这类方法呢,很显然我们需要它的作用,但唯一不足的是,它达不到我们最好的期望,所以我们也要重写
它,以便达到我们的期望]
5 怎么改写呢???很显然不能全部改写了,它毕竟还是有用的。于是我们在它原来方法的基础上改写它,
,先执行一下它原来的方法,在这个基础上 加入我们 想要的东西,而执行它原来的方法就是[super init]
先执行一下
6 然后呢,在它执行以后,它已经获得它原本的东西,我们把不满意的地方改掉,如
-(id) init
{
self = [super init];//先得到它原来的东西
if (self != nil)
{
self->_age = 12;//把我们不满意的地方干掉,我不要0,我要一初始化年龄就为12
(init 方法初始化的时候,把对象的成员都初始化为0,我们在有的时候是不需要0的)
return self;
}
7 像这类方法的重写呢,只是在保存原来方法的基础上重写它的某部分,间接的改写它,而不是根本的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2