苹果开发 笔记(22)
2015-05-14 09:20
197 查看
今天继续练习,重新去理解一下动态识别的应用。平时我们经常判断一个对象是不是所属的类或者子类 ,可以通过is 的方法去完成。这个是swift提供的一个方法。oc则提供丰富的方式来判断,大部分功能集成在NSObject可见。可以说NSObject 责任非常重。
下面创建了三个类 分别为Animal(动物) Human(人类) 和Cat(猫) 类
它们的关系是
Cat 继承了Animal类
Human 则不继承Animal
定义相关的类
Animal.h定义
实现动物
实现人类
猫类:
实现代码
在学习动态识别应用里面提及关于静态和动态的一些区别。我们常用的NSString、NSArray、NSInteger 发生一些错误等在编译期就能区别开来 这是编译器帮我们做的工作。
关于静态的好处是什么?
关于动态的优点和缺点又是什么?
这些知识,还是要继续区分一下才行。好,继续看书。
引用下面的一些观点
来自于成少雷的教学
1.可以将对象分为动态类型和静态类型两种
2.如果不涉及多态,尽量使用静态类型
3.静态类型可耕好的在编译阶段而不是运行阶段指出错误
4.静态类型能够提供程序的可读性。
方法名 | 作用 |
---|---|
isMemberOfClass | 检测是不是某个类 |
isKindOfClass | 检测是不是某个类或者所属子类 |
respondsToSelector | 检测方法是否存在接受响应 |
isSubclassOfClass | 是否所属的子类 |
performSelector | 响应相应的方法 |
它们的关系是
Cat 继承了Animal类
Human 则不继承Animal
定义相关的类
Animal.h定义
[code]#import <Foundation/Foundation.h> @interface Animal : NSObject -(void) eat; @end
实现动物
[code]#import "Animal.h" @implementation Animal -(void) eat { NSLog(@"吃食物"); } @end
实现人类
[code] #import <Foundation/Foundation.h> @interface Human : NSObject //说话 -(void) say; @end
[code]#import "Human.h" @implementation Human -(void) say { NSLog(@"说话"); } @end
猫类:
[code] #import <Foundation/Foundation.h> #import "Animal.h" @interface Cat : Animal @end
[code]#import "Cat.h" @implementation Cat @end
实现代码
[code]#import <Foundation/Foundation.h> #import "Human.h" #import "Animal.h" #import "Cat.h" int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... NSLog(@"Hello, World!"); //如何得到类对象 //1.可以通过类发送class 的消息 //2.可以通过实例对象 发送class的消息 //动态识别应用 Animal *animalA =[[Animal alloc]init]; Animal *animalB =[[Animal alloc]init]; Cat *cat =[[Cat alloc]init]; //判断两个类对象是不是一样? if([animalA class]==[animalB class]) { NSLog(@"通过实例对象获得类对象判断是一样的"); } //对象是不是所属类对象成员,判断是不是属于某个类 if([animalA isMemberOfClass:[Animal class]]) { NSLog(@"判断是所属Animal类"); } //对象是不是所属类对象的成员或者子类的成员,判断是不是属于某个类或者子类,区别于isMemberOfClass方法 if([animalA isKindOfClass:[Human class]]) { NSLog(@"判断是所属Animal类"); } else { NSLog(@"判断不是所属Human类"); } //判断是不是某个类的子类 if([Cat isSubclassOfClass:[Animal class]]) { NSLog(@"Cat是Animal的子类"); } //通过字符串 获取 类对象 Class myClass = NSClassFromString(@"Animal"); id animal =[[myClass alloc] init];//实例化对象 [animal eat];//采用动态类型去发送消息 //判断是否能响应指定的eat的方法 if([animal respondsToSelector:@selector(eat)]) { [animal performSelector:@selector(eat)]; } } return 0; }
在学习动态识别应用里面提及关于静态和动态的一些区别。我们常用的NSString、NSArray、NSInteger 发生一些错误等在编译期就能区别开来 这是编译器帮我们做的工作。
关于静态的好处是什么?
关于动态的优点和缺点又是什么?
这些知识,还是要继续区分一下才行。好,继续看书。
引用下面的一些观点
来自于成少雷的教学
1.可以将对象分为动态类型和静态类型两种
2.如果不涉及多态,尽量使用静态类型
3.静态类型可耕好的在编译阶段而不是运行阶段指出错误
4.静态类型能够提供程序的可读性。
相关文章推荐
- 苹果开发 笔记(48) UIImage CIImage CGImageRef
- 苹果开发 笔记(26)
- 苹果开发 笔记(86)Stack View in xcode 7
- 苹果开发 笔记(37)oc与JS调用
- 苹果开发 笔记(13)
- 苹果开发 笔记(32)
- 苹果开发 笔记(76)升级ios9 的悲催
- 苹果开发 笔记(90)第三方存储库 YTKKeyValueStore
- 苹果开发 笔记(71)CoreData
- 苹果开发 笔记(1)
- 苹果ios开发一年的工作笔记
- 【iOS开发笔记22/50】:恼人的a valid provisioning profile for this executable was not found错误
- 苹果开发 笔记(74)GDataXML 解析 xml
- 苹果开发 笔记(91)cocopods 插件升级问题记录
- 苹果产品开发笔记
- 苹果开发 笔记(8)
- 苹果开发 笔记(38)UIImagePickerController
- iOS开发笔记之三十一——日历NSCaledar使用过程中遇到的一个苹果系统bug
- 苹果开发 笔记(46)圆角
- 苹果开发 笔记(3)