iOS学习笔记---oc语言第三天
继承、初始化方法
一、继承
继承的上层:父类 继承的下层:子类
继承是单向的,不能相互继承
继承具有传递性:A继承于B,B继承于C,A具有B和C的特征和行为
子类能继承父类全部的特征和行为(私有变量也继承过来了,只是不能访问)
面向对象提供了继承语法。能大大简化代码,把公共的方法和实例对象写在父类里。子类只需要写自己独有的实例变量和方法即可
继承既能保证类的完整,又能简化代码
继承特点
oc中只允许单继承
没有父类的类称为根类,oc中得根类是NSObject(祖宗)
继承的内容:所有的实例变量和方法
如果子类不满意父类方法的实现,可以重写父类的方法
继承树

继承中方法的执行

super 关键字
super是编译器指令,并⾮对象。
作用:给super发消息,可以执⾏⽗类中实现的⽅方法。
⼦类可以重写⽗类的⽅法,即:⼦类既有自己的实现,⼜有父 类继承下来的实现,如果想使⽤用父类的实现,向super发送消息
//重写sayHi方法
- (void)sayHi
{
[super sayHi];//调用父类sayHi方法
NSLog(@"ok");
}
- (void)study//学习
{
[super sayHi];//调用父类sayHi方法
[self sayHi];//调用自身sayHi方法
NSLog(@"%@ 我正在努力学习",_name);
}
二、初始化方法
创建对象分两步:开辟空间、初始化。
初始化⽅方法的主要作⽤用是:为某些实例变量赋初值。
初始化⽅方法在对象的整个⽣生命周期⾥里只使⽤用⼀一次。
- (instancetype)initwithName:(NSString *)name sex:(NSString *)sex number:(NSInteger)number;
//instancetype取代id
- (id)initwithName:(NSString *)name sex:(NSString *)sex number:(NSInteger)number;
//初始化的时候,优先调用父类的初始化方法,初始化父类中的变量,然后在初始化自己的变量。
//每个类都清楚自己独有的变量,因此。初始化方法里仅仅初始化自己独有的变量,通过调用父类的初始化方法,初始化继承过来的变量
///经过一番调用之后,继承树上的所有变量都可以得到初始化
//最不科学的初始化方法:在子类里面,为每一个变量赋值,因为,你需要自己查阅都继承了哪些变量。

⼦类定义了除⽗类中公共实例变量之外的实例变量。在自身的初始 化方法中,优先向super发送init消息,初始化公共变量,初始化成 功之后,再初始化⾃身特有变量,从⽽完成全部实例变量的初始化。
初始化过程
1. 执⾏行⽗父类中实现的初始化⽅方法。(向上递归到NSObject类中的初始化⽅方法)
2. 从根类NSObject开始执⾏行初始化⽅方法。
3. 判断⽗父类中的初始化是否成功,即self是否存在。
4. 完成对象的初始化设置,返回对象。
5. 初始化⼦子类实例变量。
初始化方法特征
初始化⽅方法是 “-”⽅方法
id或者instancetype类型的返回值
以init开头
可以带0到多个参数 内部实现:先执⾏行super的初始化⽅方法,再初始化⾃自⾝身变量,return self。
三、便利构造器
便利构造器在初始化方法的基础上前进了⼀小步。
封装了对象创建过程。
便利构造器是“+”⽅法,返回本类型的实例,⽅法名以类名开头。
可以有0到多个参数。 内部实现:封装了alloc和初始化⽅法。使⽤用起来更加简洁
实现函数中代码
+ (Student *)studentWithName:(NSString *)name sex:(NSString *)sex hobby:(NSString *)hobby age:(NSInteger)age number:(NSInteger)number
{
return [[Student alloc] initWithName:name sex:sex hobby:hobby age:age number:number];
}
主函数内代码
Student *student1 = [Student studentWithName:@"wangw" sex:@"man" hobby:@"xuexi" age: number:];
iOS学习笔记---oc语言第三天的更多相关文章
- iOS学习笔记---oc语言第一天
第一讲 初始类和对象 c语言的超集,允许在oc中使用c语言源代码.编译器兼容c语言程序 具备完善的面向对象特性 包含一个运行时系统 类库丰富 面向对象编程 oop 面向对象语言:c++ java ...
- iOS学习笔记---oc语言第五天
字典,数组 ,集排序 一.字典类 存储以下数据 name:张三; sex:男;age:18 film:风暴; playcount:10000次;price:60元 字典类用于保存具有映射关系(key- ...
- iOS学习笔记---oc语言第四天
字符串 数组 一.使用苹果帮助文档 学会使⽤用苹果帮助⽂文档是开发者的⼀一项技能 Inherits from 继承⾃自 Conforms to 遵循什么协议 Framework 属于哪个框架 Avai ...
- iOS学习笔记---oc语言第十天
内存管理高级 一 属性的内部实现原理 assign retain copy assign 下的属性内部实现 setter方法 @property(nonatomic,assign)NSS ...
- iOS学习笔记---oc语言第九天
初级内存管理 iOS应用程序出现crash(闪退),90%以上是内存问题////其他:数组越界,方法只声明没实现 内存问题体现在两个方面:内存溢出\野指针异常 内存溢出:程序运行超出内存上限 野指针异 ...
- iOS学习笔记---oc语言第六天
Block .数组高级 block本质上就是匿名函数(没有名称的函数) block语法和函数指针很相似 回顾函数 函数:C语⾔中,实现某一类功能的代码段. 完整的函数包含两部分:函数声明.函数定义 函 ...
- iOS学习笔记---oc语言第二天
实例变量与方法 一.实例变量的可见度 二.方法 oc中的方法分两种:类方法和实例方法 类方法:只能类使用 eg:+ (id)alloc 注:类方法中不能使用实例变量 实例方法:只能对象使用,eg:- ...
- iOS学习笔记---C语言第三天
循环结构 : while循环 do...while循环(几乎不用) for循环(使用最多) 特点:在给定的条件成立时,反复执行某程序段,直到条件不成立为止. 给定的条件为循环条件,反复执行 ...
- iOS学习笔记---oc语言第八天
属性 能在一定程度上简化代码,并且增强实例变量的访问安全性 属性的声明:使用@property声明属性 eg:@property NSSstring *name;相当于@interface中声明了两 ...
随机推荐
- 可伸缩的textview。
在一些应用中,比如腾讯的应用市场APP应用宝,关于某款应用的介绍文字,如果介绍文字过长,那么不是全部展现出来,而是显示三四行的开始部分(摘要),预知全部的内容,用户点击展开按钮即可查阅全部内容. 这样 ...
- [Js]弹性运动
描述:像弹簧一样左右弹动,最后缓慢停下来 一.加减速运动 1.加速运动 var iSpeed=0;iSpeed++; 速度越来越快,最后冲出去 2.减速运动 var iSpeed=20;iSpeed- ...
- [Js]Ajax
一.什么是Ajax 不刷新的情况下读取数据或提交数据 (最早出现ajax:谷歌地图,拖动一下出现一片新的视野) 应用:用户注册.在线聊天.微博 特性:只能从服务器上去读取数据(所以我们需要配置自己的服 ...
- win7 摄像头驱动软件找不到,只有sys文件
有的驱动只有sys文件,但是仍然可以在qq视频等用,只是找不到amcap.exe等可执行文件, 因为没有摄像头软件,下载一个安装上即可
- c# datagridview按条件搜索查询过滤
DataView的RowFilter 实现过滤 根据文本框文字对datagridview的数据进行模糊查询, 其实也就是一个过滤 string qymc = textBox1.Text.ToStrin ...
- 启动 nginx 失败 "fastcgi_pass" directive is duplicate
[emerg] 4953#0: "fastcgi_pass" directive is duplicate in /etc/nginx/sites-enabled/default: ...
- RM报表的打印偏移
自己摸索一下 RMReport1.SaveReportOptions.AutoLoadSaveSetting := True; RMReport1.SaveReportOptions.UseRegis ...
- 动态加载DLL函数GetProcAddress错误
GetLastError获取错误代码127,指代“找不到指定程序”. 解决: 转自:http://hi.baidu.com/violetwangy/item/c35b3b95ecf5374cf0421 ...
- matlab:clear,close,clc
clear 删除工作空间中的项目,释放系统内存 语法: clear clear name clear name1 name2 name3... clear global name clear -reg ...
- Javascript基础--成员函数(六)
成员函数:也叫方法 1.常用方法 比如:我们希望对象不但有属性,还希望他有行为.(行为在程序中要靠函数来体现)(1) 添加speak函数,输出我是一个好人 (2) 添加jisuan函数,可以计算从1+ ...