Objective-C的Initialize初始化方法研究

Objective-C的Initialize初始化方法研究

ID:37855552

大小:208.50 KB

页数:14页

时间:2019-06-01

Objective-C的Initialize初始化方法研究_第1页
Objective-C的Initialize初始化方法研究_第2页
Objective-C的Initialize初始化方法研究_第3页
Objective-C的Initialize初始化方法研究_第4页
Objective-C的Initialize初始化方法研究_第5页
资源描述:

《Objective-C的Initialize初始化方法研究》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、这篇文章介绍了Objective-C比较底层的内容,主要讲解initialize和init方法的区别。从这篇文章中我们不光可以了解Objective-C在初始化时所做的事情,更可以学习到一些如何研究Objective-C语言内部到底做了什么的方法,这样你也可以自己对更深层次的内容进行探寻。 原文地址:http://kupuk.com/2008/03/23/objective-c-initialize-method/作者:PaulRobinson Objective-C很有趣的一个地方是,它非常非常像C。实际上,它就是C语言加上一些其他扩

2、展和一个运行时间(runtime)。 有了这个在每个Objective-C程序中都会起作用的附加运行时间,给了它一些动态的特性。C和C++没有运行时间,他们仅仅被编译为完全按照代码的顺序去执行,不多也不少。 Objective-C中带有运行时间的好处是,它可以在你的程序运行的流程中进行参与。在Objective-C中,它包括检查是否一个对象可以处理特定的消息,如果不能处理,它就帮助你自动调用其他特定的方法去完成。 initialize不是init 运行时间的行为之一就是initialize。虽然看起来有点像大家常见的init,但是他们并

3、不相同。 在程序运行过程中,它会在你程序中每个类调用一次initialize。这个调用的时间发生在你的类接收到消息之前,但是在它的超类接收到initialize之后。 举个例子,比如一个叫做Duck的类: 1.#import"Duck.h";2. 3.@implementationDuck4. 5.+(void)initialize{6.    NSLog(@"Duckinitialize");7.}8. 9.-(void)init{10.    NSLog(@"Duckinit");11.}1.@end  我们在这里记录initial

4、ize和init调用的时间。 我们建立三个Duck对象的实例: 1.NSLog(@"Hello,World!");2.    3.Duck*duck1=[[Duckalloc]init];4.Duck*duck2=[[Duckalloc]init];5.Duck*duck3=[[Duckalloc]init];  看一下记录: [Sessionstartedat2008-03-2320:03:25-0400.]2008-03-2320:03:25.869initialize_example[30253:10b]Hello,World!2

5、008-03-2320:03:25.871initialize_example[30253:10b]Duckinitialize2008-03-2320:03:25.872initialize_example[30253:10b]Duckinit2008-03-2320:03:25.873initialize_example[30253:10b]Duckinit2008-03-2320:03:25.873initialize_example[30253:10b]Duckinit 我们可以看到,虽然我们创建了3个Duck的实例,但是ini

6、tialize仅仅被调用了一次。我们也可以看到,直到我们创建了一个Duck的实例,initialize才被调用。 但是如果Duck有一个子类的话,比如我们建一个Duck的子类叫做Chicken(好怪异……):1.#import2.#import"Duck.h"3. 4.@interfaceChicken:Duck{5. 6.}7. 8.@end1.注意Chicken这个类并没有实现initialize方法。如果我们同样运行这个程序,但是加上一个Chicken的实例:  1.NSLog(@"H

7、ello,World!");2.    3.    Duck*duck1=[[Duckalloc]init];4.    Duck*duck2=[[Duckalloc]init];5.    Duck*duck3=[[Duckalloc]init];6.    7.    Chicken*chicken=[[Chickenalloc]init];8.} 我们期待看到4个Duck的init调用(因为我们建立了3个Duck和一个Chicken),但是我们看到了这样情况: [Sessionstartedat2008-03-2320:13:34

8、-0400.]2008-03-2320:13:34.696initialize_example[30408:10b]Hello,World!2008-03-2320:13:34.698initialize_

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。