六.OC基础--1. id和instancetype类型,2.动态类型检测,3.响应方法,构造方法,4.重写构造方法,5.自定义构造方法
1. id和instancetype类型,
id和instancetype类型区别:
1. id和instancetype都可以用来作为方法的返回值
2. id可以用来定义类型,instancetype不能用来定义类型
id obj;
instancetype obj2; // 错误
3. instancetype可以精确返回值类型
2.动态类型检测,
1. isKindOfClass判断某个对象是否是类的实例对象,或者子类的实例对象(对象和类)
格式:[对象 isKindOfClass 类对象];
BOOL isInstance = [ani isKindOfClass:[Animal class]];
2. isMemberOfClass 判断对象是否是指定类的实例对象(对象和类)
格式: [对象 isMemberOfClass: 类对象]
BOOL isInstance = [dog isMemberOfClass:[Animal class]];
3、判断类是否是指定类的子类(类和类之间的关系)
格式: [类A isSubclassOfClass:类B];
BOOL isSub = [Dog isSubclassOfClass:[Animal class]];
3.响应方法,构造方法,
1. 响应方法:
Bool isInstace = [p respondsToselector:@selector(run)];
// 没有参数
-(id) performSelector:selector(应用selector指定的方法) NSObject的方法
// 一个参数
-(id) performSelector:selector withObject:object(应用selector指定的方法,传递参数 object)
// 二个参数
-(id) performSelector:selector withObject:object1 withObject:object2(应用selector指 定的方法,传递参数object1和object2)
2. 构造方法
创建对象:Person *p=[Person new];
new方法内部做了3件事情:
可以把new方法拆开如下:
(1)使用alloc方法来分配存储空间(返回分配的对象);
(2)使用init方法来对象进行初始化。
(3)返回对象的内存首地址。
(1).调用类方法+alloc分配存储空间,返回未经初始化的对象
Person *p1=[Person alloc];
(2).调用对象方法-init进行初始化,返回对象本身
Person *p2=[p1 init];
(3).以上两个过程整合为一句:
Person *p=[[Person alloc] init];
(1)init方法就是构造方法,是用来初始化对象的方法,称为构造初始化。
(2) alloc // [a b] a给b发消息
向某个类发送alloc消息的结果 ,为该类分配内存(对象的内存地址已经有了),以存放该类的全部实例变量 。
注意
一个刚刚分配的对象并不能立即使用 ,
需要先初始化该对象,然后才能使用它 ,
但由于未进行初始化, 随后可能出现一些不可预测的行为.
4.重写构造方法,
1. [super init]的作用:先调用父类的初始化方法,对从父类继承过来的成员变量进行初始化。初始化完了之后,返回我当前的对象指针。
2. 重写构造方法注意事项:
(1)子类拥有的成员变量包括自己的成员变量以及从父类继承而来的成员变量,在重写构造方法的时候 应该首先对从父类继承而来的成员变量先进行初始化。
(2)原则:先初始化父类的,再初始化子类的。
(3)重写构造方法的目的:为了让对象方法一创建出来,成员变量就会有一些固定的值。
(4)注意点:先调用父类的构造方法[super init]; 再进行子类内部成员变量的初始化。
-(instancetype)init
{
if(self = [super init]){
// 给成员变量初始化
}
return self;
}
5.自定义构造方法
1. 自定义构造方法的规范
(1)一定是对象方法,以减号开头
(2)返回值一般是id类型或者instancetype类型
(3)方法名一般以initWith开头
2. 自定义构造方法的实现
- (instancetype)initWithName:(NSString *)name andAge:(int)age;
{
self = [super init];
if (self) {
// 要初始化的成员变量.
_name = name;
_age = age;
}
return self;
}
3. 自定义构造方法的使用注意
(1). 自己做自己的事情
(2). 父类的方法交给父类的方法来处理,子类的方法处理子类自己独有的属性
4. 使用场景
如果对象被创建的时候, 需要对里面某些属性进行初始化(设置), 这个时候就可以使用构造方法
六.OC基础--1. id和instancetype类型,2.动态类型检测,3.响应方法,构造方法,4.重写构造方法,5.自定义构造方法的更多相关文章
- 为什么说OC是运行时语言?什么是动态类型、动态绑定、动态加载?
转载:https://www.cnblogs.com/dxb123456/p/5525343.html 动态: 主要是将数据类型的确定由编译时,推迟到了运行时. 这个问题其实浅涉及到两个概念,运行时和 ...
- c++ :OOP之静态类型与动态类型
所谓静态类型即类型指针或引用的字面类型:而动态类型即类型指针或引用的实际类型. 这一对概念一般发生在基类和派生类之间. 如: class Base { ..... } class Derived : ...
- 七.OC基础加强--1.内存管理 2.野指针,内存泄露 3.set方法的内存管理 4.@property参数 5.@class和循环retain的使用 6.NSString的内存管理
1,内存管理简单介绍 1,为什么要有内存管理? malloc selloc dealloc```需要回头复习 一般的内存 4s 是512m内存:6 是1024m内存: 当内存过大时,会耗尽内存.出现程 ...
- C# 中的动态类型
翻译自 Camilo Reyes 2018年10月15日的文章 <Working with the Dynamic Type in C#> [1] .NET 4 中引入了动态类型.动态对象 ...
- OC基础--构造方法 id类型
new方法实现原理: new做了三件事情 1.开辟存储空间 + alloc 方法 2.初始化所有的属性(成员变量) - init 方法 3.返回对象的地址 [Person new]; == [[Pe ...
- OC基础笔记目录
OC基础(1) Objective-C简介 OC和C对比 第一个OC程序 面向对象思想 OC基础(2) 类与对象 类的设计 第一个OC类 对象方法的声明和实现 类方法的声明和实现 OC基础(3) 对象 ...
- OC基础-day06
#pragma mark - Day06_01_点语法 1. 点语法. 1). 如果要访问对象的属性,还要去调用属性对应的setter getter方法.好烦躁好烦躁. 2). 点语法的作用: 快速调 ...
- OC 动态类型,动态绑定,动态加载
OC 动态类型,动态绑定,动态加载 Objective-C具有相当多的动态特性,基本的,也是经常被提到和用到的有 动态类型(Dynamic typing) 动态绑定(Dynamic binding) ...
- OC基础(11)
构造方法 自定义构造方法 继承中的自定义构造方法 自定义类工厂方法 *:first-child { margin-top: 0 !important; } body > *:last-child ...
随机推荐
- OO第三次作业总结(JML)
第三单元的课题是JML, 即java建模语言.JML是一种描述接的语言.通过前置条件和后置条件,描述一个模块的行为.本单元我们扮演一个项目中的一员,完成自己的一小部分工作,最终实现整个项目.而限制我们 ...
- P3258 松鼠的新家
松鼠的新家 洛谷链接 尽管标签是省选/NOI-,但提交的通过率已经高到三分之一了. 但它仍旧是一个省选/NOI-的题. 大致题意就是按输入的顺序走一棵树,看每个节点经过多少次.问题就相当于把一条链上的 ...
- 【java基础 3】树形结构数据呈现的递归算法实现
一.基本概况 在我的项目中,常常会用到树形结构的数据,最为明显的就是左边菜单栏,类似于window folder一样的东西. 而我之前一直是借助前端封装好的ZTree等工具实现展示,而后台则通常使用递 ...
- C#通信学习(一)
基础知识 TCP/IP:Transmission Control Protocol/Internet Protocol,传输控制协议/因特网互联协议,又名网络通讯协议.简单来说:TCP控制传输数据,负 ...
- 人生第一场CTF的解题报告(部分)
解题报告 濮元杰部分: 王者归来: 120 场景 小王入职了一段时间,最近有点无聊.Web安全项目不多,白天看着其他项目组的同事忙得热火朝天,小王有点坐不住了,这也许是新人都会有的想法,乐于助人.想到 ...
- 多边形之战(bzoj 2927)
Description 多边形之战是一个双人游戏.游戏在一个有n个顶点的凸多边形上进行,这个凸多边形的n-3条对角线将多边形分成n-2个三角形,这n-3条对角线在多边形的顶点相交.三角形中的一个被染成 ...
- msp430项目编程20
msp430中项目---超声波测距系统 1.定时器工作原理 2.电路原理说明 3.代码(显示部分) 4.代码(功能实现) 5.项目总结 msp430项目编程 msp430入门学习
- CPM、CPC、CPA、PFP、CPS、CPL、CPR介绍
一个网络媒体(网站)会包含有数十个甚至成千上万个页面,网络广告所投放的位置和价格 就牵涉到特定的页面以及浏览人数的多寡.这好比平面媒体(如报纸)的“版位”.“发行 量”,或者电波媒体(如电视)的“时段 ...
- 原生js中stopPropagation,preventDefault,return false的区别
1.stopPropagation:阻止事件的冒泡,但不阻止事件的默认行为. 最好莫过于用例子说明: <div id='div' onclick='alert("div") ...
- Linux 常用但较容易忘记的命令
看死循环 strace -p pid 查看系统版本 cat /etc/issue 设置内核启动版本 /etc/lilo.conf , /boot/grub/grub.conf 设置启动模式 /etc ...