黑马程序员技术交流社区

标题: 【李老师视频】OC-面向对象-核心语法-类的深入研究03疑问 [打印本页]

作者: 张传宾    时间: 2015-1-16 23:58
标题: 【李老师视频】OC-面向对象-核心语法-类的深入研究03疑问
本帖最后由 张传宾 于 2015-1-17 18:22 编辑

【李老师视频】OC---面向对象---核心语法---类的深入研究03 类的加载与初始化中:类方法+(void)load与+(void)initialize 。
说这俩类方法是在程序启动时类加载的时候执行的类方法,顺序是父类——>子类。
那么问题来了:
既然父类、子类都有这个方法,为啥不是子类重写了父类的这个方法呢?
:(:):(*
*
*
这是个白痴问题。。。我已经解决啦。。。
*
*
*
昨晚看晕乎了,所以问的这个白痴问题。。。
*
*
*
下面是我今儿想通了的答案,请指教。。。
“就算是理解成重写了,也能说的通呀,你想,,程序一启动,每个类都会自定加载+load这个方法、父类加载父类的+load,子类加载子类的+load,就算子类重写了+load,也不会影响父类加载时使用自己的+load呀。。。
另外,也可以理解成这两个方法是任意类都有的方法,在创建时系统自带的,当程序启动时,启动程序也是执行代码、而+load正是在这段代码当中,同理+initialize是使用时的代码里的一部分。。。。
我又想、这两个方法被重写成只有一句输出:“NSLog(@”@#¥%……&“);”的时候程序照样能执行,那么?原来的代码是干嘛用的呀?啥都没干嘛...
昨晚我晕了,以为重写后父类加载的时子类重写后的+load。。。猪猪猪——>我


作者: 张传宾    时间: 2015-1-17 00:01
1楼留给自己作为今天签到
作者: liu1170486003    时间: 2015-1-17 00:02
额,我还没有看到那里,不过我记得init方法不是一个对象方法么,还是不是同一个东西,先mark,看到了在说。
作者: 爱在西元前    时间: 2015-1-17 00:03
{:3_50:} 不明觉厉
作者: 张传宾    时间: 2015-1-17 00:05
liu1170486003 发表于 2015-1-17 00:02
额,我还没有看到那里,不过我记得init方法不是一个对象方法么,还是不是同一个东西,先mark,看到了在说。 ...

init是初始化分配的内存吧?initialize是第一次使用某个类的时候的初始化,加油看吧,看到这的时候给我讲解讲解。。。
作者: 张传宾    时间: 2015-1-17 00:06
爱在西元前 发表于 2015-1-17 00:03
不明觉厉

学到这个点儿你也不简单哦~
作者: 爱在西元前    时间: 2015-1-17 00:19
张传宾 发表于 2015-1-17 00:06
学到这个点儿你也不简单哦~

准备接下来打排位 ;P
作者: 张传宾    时间: 2015-1-17 00:34
爱在西元前 发表于 2015-1-17 00:19
准备接下来打排位

我在无畏先锋:hug:
作者: zyp115    时间: 2015-1-17 03:22
额,视频上说的是程序启动加载+load所有的类,第一次使用某个类时初始化那个类,从父类开始初始化,就像init方法一样,子类含有的属性总比父类多,所以要先初始化父类,再初始化这个类。。重写大多也是为了给子类中父类所没有的属性初始化吧,个人理解啊,我也刚看到这,零基础,说错勿怪
作者: 张传宾    时间: 2015-1-17 14:42
zyp115 发表于 2015-1-17 03:22
额,视频上说的是程序启动加载+load所有的类,第一次使用某个类时初始化那个类,从父类开始初始化,就像ini ...

重写就是因为父类的方法不适合自己,所以才重写了这个方法。。。上网查了下,我觉得应该是程序刚启动,还没来得及判断这方法是不是重写前,就启动了+load和-initialize,这样子吧~
作者: 爱在西元前    时间: 2015-1-17 15:56
张传宾 发表于 2015-1-17 00:34
我在无畏先锋

好的 我也经常在那玩 不过大号在德玛西亚  无畏先锋ID:他失散多年地野爸 :lol
作者: lnyg1992    时间: 2015-1-17 16:25
本帖最后由 lnyg1992 于 2015-1-17 16:28 编辑

我的理解是,这两个方法是每个类里面都有的,调用也是系统自动调用,有哪几个类,就调用对应这几个类的这两个方法,就好比Person这个类有这两个方法,Student类继承自Person,Student类也有这两个方法(有这两个方法不关继承的事,是个类就有),程序加载的时候,会用Person这个类调用这方法,也会用Student这个类调用方法
作者: haojuncong    时间: 2015-1-17 16:33
问得好。。。。
作者: mengxingdong    时间: 2015-1-17 17:05
首先load 方法是在类加载时,调用的。我们要把所有的类都加载进内存中,肯定会调用所有类中得load方法。initialize是在第一次使用某个类时,所以,你使用哪个类,肯定就会调用哪个类的Initialize方法
作者: 满大街的谎言。    时间: 2015-1-17 17:17
我也还没有看到呢,OC确实难好多。
作者: 张传宾    时间: 2015-1-17 18:11
lnyg1992 发表于 2015-1-17 16:25
我的理解是,这两个方法是每个类里面都有的,调用也是系统自动调用,有哪几个类,就调用对应这几个类的这两 ...

我发现我问了一个白痴的问题额。。。。就算是理解成重写了,也能说的通呀,你想,,程序一启动,每个类都会自定加载+load这个方法、父类加载父类的+load,子类加载子类的+load,就算子类重写了+load,也不会影响父类加载时使用自己的+load呀。。。昨晚我晕了,以为重写后父类加载的时子类重写后的+load。。。猪猪猪——>我
作者: 张传宾    时间: 2015-1-17 18:25
lnyg1992 发表于 2015-1-17 16:25
我的理解是,这两个方法是每个类里面都有的,调用也是系统自动调用,有哪几个类,就调用对应这几个类的这两 ...

这两个方法,被老师重写成只有一句话了:“NSLog(@“#¥%&*)&”);”这样程序都能运行,那原来方法里面的代码是什么作用啊?有没有这俩方法完全没影响嘛...
作者: 张传宾    时间: 2015-1-17 18:26
haojuncong 发表于 2015-1-17 16:33
问得好。。。。

问的很白痴。。。真的很白痴。。。。帖子内容我又重新编辑了一下。。。
作者: 张传宾    时间: 2015-1-17 18:27
满大街的谎言。 发表于 2015-1-17 17:17
我也还没有看到呢,OC确实难好多。

不难不难、好好看、认真敲,不难的,别怕。
作者: 张传宾    时间: 2015-1-17 18:29
mengxingdong 发表于 2015-1-17 17:05
首先load 方法是在类加载时,调用的。我们要把所有的类都加载进内存中,肯定会调用所有类中得load方法。ini ...

你讲的对、可是。。。可是这俩方法被老师重写的只有一句输出了:“NSLog(@“#¥%&*)&”);”这样程序都能运行,那原来方法里面的代码是什么作用啊?有没有这俩方法完全没影响嘛...
作者: mengxingdong    时间: 2015-1-17 18:56
这两个方法作用,就是视频里提到的呢。不过我猜测,这两个方法是苹果内部定义这么执行的把。
作者: 资博仁    时间: 2015-1-17 19:13
非常厉害
作者: 张传宾    时间: 2015-1-18 09:54
mengxingdong 发表于 2015-1-17 18:56
这两个方法作用,就是视频里提到的呢。不过我猜测,这两个方法是苹果内部定义这么执行的把。 ...

啊啊啊? 内部就一句输出语句呀???不太可能吧...
作者: 张传宾    时间: 2015-1-18 09:57
资博仁 发表于 2015-1-17 19:13
非常厉害

没有啦~ 问的很白痴的问题啦~:#
作者: mengxingdong    时间: 2015-1-18 11:33
张传宾 发表于 2015-1-18 09:54
啊啊啊? 内部就一句输出语句呀???不太可能吧...

我是说调用load 和initialize方法。
输出这个语句。只是子类重写了方法。
作者: 满大街的谎言。    时间: 2015-1-18 12:01
张传宾 发表于 2015-1-17 18:27
不难不难、好好看、认真敲,不难的,别怕。

跟着老师走,倒是没问题。自己做题就没思路了。
作者: 张传宾    时间: 2015-1-18 16:09
满大街的谎言。 发表于 2015-1-18 12:01
跟着老师走,倒是没问题。自己做题就没思路了。

哈哈,这倒是~
作者: 满大街的谎言。    时间: 2015-1-18 16:58
张传宾 发表于 2015-1-18 16:09
哈哈,这倒是~

给个好方法把。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2