对象的初始化
来源:互联网 发布:淘宝评分影响 编辑:程序博客网 时间:2024/04/30 23:48
对象的初始化
初始化对象和设置初始值的过程通常可以合并到一个方法中。包含很多方法和实例变量的类通常还有几个初始化方法。例如:Foundation框架中的NSArray类中包含以下6 个初始化方法:
initWithArray:
initWithArray:copyltems:
intWithContentsOfFile:
initWithContentsOfURL:
initWithObjects:
initWithObjects:count:
常见的初始化方法都以init开头,可以看到,NSArray的初始化方法遵循了这个管理。
在编写初始化方法时,如果希望在类对象初始化时做一些事情,例如:在创建类的对象时需要使用和引用到一个或多个实例变量,可以通过覆写init方法达到目的,init覆写的模板为:
- (id) init
{
self = [super init];
if(self ) {
//初始代码
}
return self;
}
这个方法调用父类的初始化方法,使的继承的实例变量能够正常初始化。并且必须将父类的init方法执行结果赋给self,因为初始化过程改变了对象在内存中的位置。注释说明可以在那插入自定义的初始化代码,通常可以在这个位置创建并初始化实例变量。
如果你你的类包含多个初始化方法,其中一个应该是指定的初始化方法,并且其他所有的初始化方法都应该使用这个方法,通常这个方法应该是最复杂的初始化方法(一般是参数最多的方法)。任何人要想从该类派生子类,都可以重载这个指定的初始化方法,确保正确初始化新的实例。
基于这个讨论,Fraction类的初始化方法initWith:over:可能如下:
- (Fraction *)initWith: (int) n over: (int ) d
{
self = [super init];
if(self ) {
[self setTo: n over: d];
}
return self;
}
为了使用指定的初始化规则,你需要修改Fraction 类的init方法。这一点尤其是作为子类时特别注意。init方法如下:
- (id) init
{
return [self initWith: 0 over:0];
}
注意,ini方法的返回类型被定义为id类型,这是编写可能会被继承的的类的init方法的一般规则。你并不想编码一个类名,比如子类的对象并不等同于父类的对象。为保持一致,initWith:over:方法也将返回类型改为id。
- 对象的初始化块。对象初始化过程
- 对象的初始化
- C++对象的初始化
- 对象数组的初始化
- 子对象的初始化
- STL的对象初始化
- 对象的初始化
- 对象的初始化顺序
- 对象的初始化
- Java对象的初始化
- 对象的初始化
- 对象的初始化
- 05. 对象的初始化
- 对象的初始化
- 对象的初始化过程
- 对象的初始化过程
- 对象的初始化
- 对象的初始化方法
- IComparable<>,IFormattable,IEnumerable<>接口使用
- 担任国际期刊(副)主编的中国学者和华人华裔学者
- 在Windows平台下使用MinGW+Eclipse构建一个hello world
- 工作日志2014-08-06
- zookeeper注册中心解析
- 对象的初始化
- SQL拼接代码!cmstop系统
- A/B(乘法逆元)
- 10、令operate= 返回一个reference to *this
- ActiveReport入门教程(三) - 卡片组
- zeromq源码阅读 —— Msg.hpp & Msg.cpp 的 msg_t (zmq中的消息)
- JS操作DOM元素属性和方法(转)
- 博弈论, 取石子游戏1
- linux系统下如何解压RAR文件软件rarforlinux