OC基础-静态类型,动态类型,编译检查,运行检查,父子类指针和对象互指17
2017-06-26 06:06
387 查看
1. 弱语言和强语言的区别.
编译器在编译的时候.语法检查的时候没有那么严格.不管你怎么写都是可以的.
int num = 12.12;
优点:灵活咋个行都写.
缺点:太灵活
强类型的语言:编译器在编译的时候做语法检查的时候行就是行不行就是不行.
2.静态类型和动态类型
静态类型:指的是1个指针指向的对象是1个本类对象.
动态类型:
指的是1个指针指向的对象不是本类对象.
3. 编译检查和运行检查.
编译检查
编译器在编译的时候,能不能通过1个指针去调用指针指向的对象的方法.判断原则:看指针所属的类型之中是有这个方法,如果有就认为可以调用编译通过.
如果这个类中没有那么编译报错.
这个叫做编译检查.在编译的时候能不能调用对象的方法主要是看指针的类型.
我们可以将指针的类型做转换,来达到骗过编译器的目的.
运行检查.
编译检查只是骗过了编译器.但是这个方法究竟能不能执行.所以在运行的时候.运行时会去检查对象中是否真的有这个方法.如果有就执行如果没有就报错误.
代码里可以在执行的时候检查一下
1).
判断对象中是否有这个方法可以执行.
- (BOOL)respondsToSelector:(SEL)aSelector;
2).
判断类中是否有指定的类方法.
+ (BOOL)instancesRespondToSelector:(SEL)aSelector;
3).
判断指定的对象是否为
指定类的对象或者子类对象.
- (BOOL)isKindOfClass:(Class)aClass;
4).
判断对象是否为指定类的对象
不包括子类.
- (BOOL)isMemberOfClass:(Class)aClass;
5).
判断类是否为另外1个类的子类.
+ (BOOL)isSubclassOfClass:(Class)aClass;
4 父子类指针和对像互指
父类指针指向子类对象.实际上任意的指针可以执行任意的对象.编译器是不会报错的.父指针指向子类对象,因为子类继承了父类的所有属性,使用的时候,只能获得父类中有的方法和属性,而子类中拥有父类中的
所有方法和属性,在运行的时候,也不会报错。
当1个子类指针指向1个父类对象的时候,如果调用了子类中的特有方法,编译器运行通过子类指针去调用子类独有的方法.编译不会出错
但是在运行的时候是会出问题的.因为父类对象中根本没有子类成员.
相关文章推荐
- C++基础之:对象的静态类型和动态类型
- 编译时和运行时、OC中对象的动态编译机制
- C++ 是一门静态类型语言,在编译时会作类型检查
- C++中指针和引用有两种类型:静态类型和动态类型
- 在 ActionScript 3.0 中,无论是在严谨模式下还是在警告模式下编译,都将进行运行时类型检查
- C++基础--------带默认参数的虚函数 静态类型和动态类型分析
- [CLR via C#]4. 类型基础及类型、对象、栈和堆运行时的相互联系
- C++对象的静态类型与动态类型
- C++之:对象的静态类型和动态类型
- NSString* testObject = [[NSData alloc] init];testObject 在编译时和运行时分别是什么类型的对象?
- java学习之编译时类型(前期绑定)和运行时类型 (后期绑定、动态绑定、运行时绑定)
- OC基础6:多态、动态类型和动态绑定
- java之编译时类型(前期绑定)和运行时类型 (后期绑定、动态绑定、运行时绑定)
- OC基础:OC 基本数据类型与对象之间的转换方法 分类: ios学习 OC 2015-06-18 20:01 11人阅读 评论(0) 收藏
- 五.OC基础--1.多态,2.类对象,3.点语法,4.@property&@synthesize,5.动态类型,内省(判断对象是否遵循特定的协议,以及是否可以响应特定的消息)
- c++中静态和动态生存期对象的时钟程序运行问题
- NSString* testObject = [[NSData alloc] init];testObject 在编译时和运行时分别是什么类型的对象?
- C++ 指向空指针的对象(关于编译时绑定和运行时绑定)
- 【.Net基础一】 类型、对象、线程栈、托管堆运行时的相互关系
- 【Groovy 2.0静态类型检查及编译功能介绍】