- (id)init 什么时候调用?重写和重载的区别
2016-03-30 12:01
274 查看
关于下面函数有的时候调用,有的时候不调用,这种非常弱智的问题,我真的不太懂,查看了得到的结论是
该函数返回一个指向对象本身的指针。调用系统init方法后,所有成员变量都默认初始化为0,如果我们希望一些成员变量初始化后的值不为0,那么我们就需要自定义类的初始化函数。
切记函数返回类型为id类型。
从代码中可以看出,重载初始化init方法包含三步骤:
调用父类的init方法,初始化父类的成员变量及属性;
判断是否成功初始化父类,如果成功则初始化自己的成员变量及属性;
返回对象本身
说明:子类重载父类init方法后,子类对象优先调用子类的init方法。
重载和重写的区别
重写:
在Objective-c中,子类可继承父类中的方法,而不需要重新编写相同的方法,直接可以使用父类的方法。
但有时我们不想使用使用父类方法,而是想作一定的修改,怎么办呢?只要将子类中书写一个与父类具有相同的方法名、返回类型和参数,就可以将将父类的方法覆盖重写。比较简单。
重载:
在Objective-c中,方法是不能重载的。也就是说我们不能在类中定义这样的两个方法:它们的名子相同,参数个数相同,参数类型不同,不同的返回值类型。否则Xcode会报错
参考一下博客
http://www.lxway.com/405695666.htm
http://www.jianshu.com/p/bad19a32d39d
<span style="background-color: rgb(0, 0, 0);">- (id)init { if (self = [super init]) { [self loadPreference]; } return self; }</span>
该函数返回一个指向对象本身的指针。调用系统init方法后,所有成员变量都默认初始化为0,如果我们希望一些成员变量初始化后的值不为0,那么我们就需要自定义类的初始化函数。
切记函数返回类型为id类型。
重写init函数
看下面代码@interface Person:NSObject @property int age; - (id)init; //自定义初始化函数声明 @end @implementation Person - (id)init { //首先调用父类的init方法 self = [super init]; //若成功返回指向对象的指针则进行初始化 if(self) //即self!=nil; { _age = 10; } return self; //返回初始化完毕的对象 } @end
从代码中可以看出,重载初始化init方法包含三步骤:
调用父类的init方法,初始化父类的成员变量及属性;
判断是否成功初始化父类,如果成功则初始化自己的成员变量及属性;
返回对象本身
说明:子类重载父类init方法后,子类对象优先调用子类的init方法。
自定义类的初始化函数
看下面代码:@interface Person:NSObject @property int age; - (id)initWithAge:(int)age; **//自定义初始化函数声明** @end @implementation Person - (id)initWithAge:(int)age { //调用父类的init方法,若成功返回指向对象的指针则进行初始化 if(self = [super init]) //即self!=nil; { _age = age; } return self; //返回初始化完毕的对象 } @end
重载和重写的区别
重写:
在Objective-c中,子类可继承父类中的方法,而不需要重新编写相同的方法,直接可以使用父类的方法。
但有时我们不想使用使用父类方法,而是想作一定的修改,怎么办呢?只要将子类中书写一个与父类具有相同的方法名、返回类型和参数,就可以将将父类的方法覆盖重写。比较简单。
重载:
在Objective-c中,方法是不能重载的。也就是说我们不能在类中定义这样的两个方法:它们的名子相同,参数个数相同,参数类型不同,不同的返回值类型。否则Xcode会报错
参考一下博客
http://www.lxway.com/405695666.htm
http://www.jianshu.com/p/bad19a32d39d
相关文章推荐
- SecureCRT rz 上传文件失败问题
- GetWindowRect和GetClientRect的区别详解
- JS中使用onkeydown事件来实现键盘效果
- json处理中文,不编码Unicode
- 解释器模式
- Android实现第一次进入App时的引导学习界面
- 作用域与闭包
- UIimage 加载图片
- 在Android studio中保存keystore
- HDU 2063 过山车(匈牙利算法)(二分图求最大匹配)
- msyql 中按照数字型字符串进行排序
- Session的基本用法(增删改查)
- Java 动态绑定 静态绑定
- MySQL FEDERATED 存储引擎的使用
- python学习2:urllib2
- android-async-http框架源码分析
- android-async-http框架源码分析
- Sitemesh 3 的使用及配置
- IOS caf音频文件如何转化成mp3文件
- 斗地主 - 获取扑克牌类型