A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯大卫 中级黑马   /  2014-8-31 23:31  /  1708 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在视频中老师会经常重写一些系统自带的方法 ,比如在讲到类的本质的时候重写了+(void)方法(这个方法是程序运行时候 加载类对象时候使用的类方法)  那么如果重写了这个方法 那么肯定也就是原来的没有重写以前的+(void)方法被覆盖了  那么应该会导致加载类对象的时候会出现错误啊  毕竟 跟原来自带的方法已经不一样 了  ,但是  看老师的视频的时候老师也没有说到这一点啊 而且 系统也运行正常啊 ???  求解

4 个回复

倒序浏览
坐等大神来解答,哈哈
回复 使用道具 举报
没懂....+(void)方法是load?
回复 使用道具 举报
自己写的话系统不会生成代替自己写的!自己没写的有些部分系统会自动生成!手动在系统自动生成前面
回复 使用道具 举报
本帖最后由 小月格子猫 于 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 像这类方法的重写呢,只是在保存原来方法的基础上重写它的某部分,间接的改写它,而不是根本的

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马