Objective-C 对象的类型与动态结合
创建: 2018/01/21
更新: 2018/01/22 标题前增加 [Objective-C]
完成: 2018/01/24
更新: 2018/01/24 加红加粗属性方法的声明 [不直接获取内部属性,获取用变量名,设定在变量名前加set]
更新: 2018/01/27 加红加粗类对象型Class, 首字母要大写
| 动态结合(多态) | |||||||||||||||||||||||||
| 动态结合 |
呼出同一个方法,根据呼出方不同执行的处理也不同 //--------------------------------------------------------------------- 运行结果 ----------------------------------------- |
||||||||||||||||||||||||
| 多态 |
多态就是动态结合 优点: 不用对每一个具体对象改变现有代码 p60 |
||||||||||||||||||||||||
| 数据类型与类 | |||||||||||||||||||||||||
| 用型名来声明,定义 |
// 写法 是指针参照,改一个其他参照相同的都会改 |
||||||||||||||||||||||||
| 空指针nil |
alloc把所有设为0,id和指针设为nil
向nil发送消息的返回值
|
||||||||||||||||||||||||
| 类型的静态确认 |
用明确的类去声明变量时,呼出该类不存在的东西时警告 ●id型来声明的, 不会检查类型。呼出不存在的东西也不报错。 不能用->来获取变量 ●id型和具体型可以互相代入 ●实际运行时呼出的函数是实际包含在对象内的,而不是代码上看起来的 ●id型不是(NSObject*), 和其他类没有继承关系 |
||||||||||||||||||||||||
| 编程的类型声明 | |||||||||||||||||||||||||
| signature不同的情况 |
信息选择器带上返回值类型,参数类型的叫signature //信息选择器 signature由NSMethodSignature管理 # TODO: Supply [15-05 NSMethodSignature相关] 结论: 同一信息选择器应该设为同样的signature,也就是数据类型相同 |
||||||||||||||||||||||||
| 类的前置声明 |
可以代替#import来说明该字符串是类名 要带; @class Sample; 只是说明这是个类,不能呼出内部的方法 |
||||||||||||||||||||||||
| 重写 | 运算符的多重定义 | ||||||||||||||||||||||||
| 变形 |
和c一样的写法 (型)变量; |
||||||||||||||||||||||||
|
实例变量的封装 |
|||||||||||||||||||||||||
| 获取/设定都用方法 |
不直接获取内部属性,获取用变量名,设定在变量名前加set @interface Sample {
|
||||||||||||||||||||||||
|
修改内部实例变量 的接入权限 |
@private @private // 只在当前类可以 @protected @protected // 只在当前类内部 @public @public //任何地方都可以获取内部变量 @package @package //该类所在框架内部相当于@public
可以在@implementation内声明变量(默认@private) @interface Sample : NSObject {
|
||||||||||||||||||||||||
| 类对象 (class object) | |||||||||||||||||||||||||
| 类对象是什么 |
面向对象语言里把类也看做对象的语言(Obj-C, smalltalk), 不算做对象的(C++等) Obj-C里有类方法(如alloc),没有类变量 |
||||||||||||||||||||||||
| 类对象的型 |
Class, 空的值是Nil 获取类的方法就是class [SampleClass class]; // 获取类的class类型 判断是不是指定类的实例 [ctemp isMemberOfClass: [S4_C class]] |
||||||||||||||||||||||||
|
定义类方法 |
+ (返回值类型)方法选择器; + (int)getCount: (int *)array; 可以和实例方法及实例变量重名 注意: ●不能在类方法里呼出实例变量,实例方法 ●self表示的是自己的类,呼出其他类方法直接对self发送 [self classMethod]; ●呼出父类的类方法用super [super classMethodFromSuperClass]; |
||||||||||||||||||||||||
| 类变量 |
●变量前加上static,因为static的量在其他文件处不可见 ●把参照和设置函数设成类方法 |
||||||||||||||||||||||||
| 类的初始化 |
●类的初始化在该类第一次获取消息(收到函数)时自动发生 ●NSObject的初始化方法initialize ●在初始化类对象时,父类的构造函数会自动呼出。不需要自己呼出父类的构造函数 static char *S4_Str = "还没初始化"; ●只初始化类什么都不做,用self self类方法定义在NSObject [S4_C self]; // S4_C 已初始化 |
||||||||||||||||||||||||
| 构造函数返回值的类型 |
都用id ●因为继承,如果不是id,受父类返回的类型 ●在类内部呼出自己的类方法时候 [[Sample alloc] initWithParrern: ]; // 不这么写 [[[self class] alloc] initWithParrern: ]; //这么写 这样的话被继承了也可以在子类直接用 |
||||||||||||||||||||||||
Objective-C 对象的类型与动态结合的更多相关文章
- IoC组件Unity再续~根据类型字符串动态生产对象
回到目录 这个根据类型字符串动态去生产一个接口的对象,在实现项目中用途很广,这即省去了配置config文件的麻烦,又使用生产对象变更可配置,你完全可以把这种多态持久化到数据库里或者XML文件里,在使用 ...
- OC 动态类型,动态绑定,动态加载
OC 动态类型,动态绑定,动态加载 Objective-C具有相当多的动态特性,基本的,也是经常被提到和用到的有 动态类型(Dynamic typing) 动态绑定(Dynamic binding) ...
- C# 中反射获取某类的子类和根据类型名动态创建对象
有时候,为了快速批量处理已经实现某个基类或者某个接口的子类,需要通过反射的方式获取到他们的类类型(Type),然后再通过 1 Activator.CreateInstance(objType); 或者 ...
- 利用StringList对象来管理这些动态生成的对象
如果程序需要动态创建大量的对象,那么我们可以利用StringList对象来管理这些动态生成的对象.1.创建StringList对象:OBJ := TStringList.Create; 2.保存动态生 ...
- 六.OC基础--1. id和instancetype类型,2.动态类型检测,3.响应方法,构造方法,4.重写构造方法,5.自定义构造方法
1. id和instancetype类型, id和instancetype类型区别: 1. id和instancetype都可以用来作为方法的返回值 2. id可以用来定义类型,instancetyp ...
- Java基础 ----- 判断对象的类型
1. 判断对象的类型:instanceOf 和 isInstance 或者直接将对象强转给任意一个类型,如果转换成功,则可以确定,如果不成功,在异常提示中可以确定类型 public static vo ...
- Python中对象、类型、元类之间的关系
Python里的对象.类型和元类的关系很微妙也很有意思. 1989年圣诞节期间,上帝很无聊,于是创造了一个世界. 对象 在这个世界的运转有几条定律. 1.一切都是对象 对象(object)是这个世界的 ...
- C++11用于计算函数对象返回类型的统一方法
[C++11用于计算函数对象返回类型的统一方法] 模板 std::result_of 被TR1 引进且被 C++11 所采纳,可允许我们决定和使用一个仿函数其回返值的类别.底下,CalculusVer ...
- Ⅴ.spring的点点滴滴--引用其他对象或类型的成员
承接上文 引用其他对象或类型的成员 .net篇(环境为vs2012+Spring.Core.dll v1.31) public class Person { public string Name { ...
随机推荐
- [luoguP2709] 小B的询问(莫队)
传送门 个数 1 2 3 4 5 答案 1 4 9 16 25 做差 1 3 5 7 9 显然增加一个数只需要增加 ton[a[x]] << 1 | 1 即可 减去一个数也减去这个 注意 ...
- [luoguP1962] 斐波那契数列(矩阵快速幂)
传送门 解析详见julao博客连接 http://worldframe.top/2017/05/10/清单-数学方法-——-矩阵/ ——代码 #include <cstdio> #incl ...
- Spring MVC中的拦截器/过滤器HandlerInterceptorAdapter的使用
一般情况下,对来自浏览器的请求的拦截,是利用Filter实现的 而在Spring中,基于Filter这种方式可以实现Bean预处理.后处理. 比如注入FilterRegistrationBean,然后 ...
- MongoDB小结22 - id生成规则
MongoDB的文档必须有一个_id键. 目的是为了确认在集合里的每个文档都能被唯一标识. ObjectId 是 _id 的默认类型. ObjectId 采用12字节的存储空间,每个字节两位16进制数 ...
- spring 拦截器整体配置
1.spring boot拦截器默认有 HandlerInterceptorAdapter AbstractHandlerMapping UserRoleAuthorizationIntercepto ...
- HDU 5074 Hatsune Miku 2014 Asia AnShan Regional Contest dp(水
简单dp #include <stdio.h> #include <cstring> #include <iostream> #include <map> ...
- UML图与机房收费系统实例
前言 通过看视频,对于UML也有了一些初步的了解.前面也介绍了UML的三个基本块.规则和机制,只是这些东西就像是一个个机器的零部件.要组合起来才干发挥作用. 所以,实例才是验证自己学习好坏标准,以下我 ...
- Cracking the Coding Interview 150题(一)
1.数组与字符串 1.1 实现一个算法,确定一个字符串的所有字符是否全都不同.假设不允许使用额外的数据结构,又该如何处理? 1.2 用C或C++实现void reverse(char* str)函数, ...
- php高效获取数据分页
mysql.php 获取数据库中的记录,全然个人经验总结,仅供參考! <? php /** *PHP+MYSQL数据库基本功能 *http://blog.csdn.net/yown */ ### ...
- java并发编程之Semaphore
信号量(Semaphore).有时被称为信号灯.是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们可以正确.合理的使用公共资源. 一个计数信号量.从概念上讲,信号量维护了一个许可集.如 ...