黑马程序员技术交流社区
标题:
id类型的使用与NSObject区别
[打印本页]
作者:
mazhichao
时间:
2015-7-4 22:06
标题:
id类型的使用与NSObject区别
id是一种通用的对象类型,她可以用类存储属于任何类的对象,可以理解为万能指针
***在id的定义中,已经包装好了*号,id指针只能指向os的对象
NSObject 和id都可以指向任何对象
NSObject对象会惊醒编译时检查(需要强制类型转换)
id不需要强制类型转换,id可以直接使用
编译器看到id以后,认为是动态类型,不在检查类型
instancetype与id异同
相同点
都可以作为方法的返回类型
不同点
1)instancetype可以返回和方法所在类型相同的对象,id只能返回位置类型的对象
2)instancetype只能作为返回值,不能像id那样作为参数
声明类
#import <Foundation/Foundation.h>
@interface Animal : NSObject
-(void)run;
@end
实现类
#import "Animal.h"
@implementation Animal
-(void)run
{
NSLog(@"Animal在跑");
}
@end
复制代码
继承Animal类,声明类
#import "Animal.h"
@interface Dog : Animal
@end
实现类
#import "Dog.h"
@implementation Dog
-(void)run
{
NSLog(@"Dog在跑");
}
@end
复制代码
用实践证明id与NSObject的区别
#import <Foundation/Foundation.h>
#import"Dog.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
Animal *ani = [[Animal alloc]init];
[ani run];//Animal在跑
Animal *ani2 = [[Dog alloc]init];
[ani2 run];//Dog 在跑
NSObject *ob = [[Animal alloc]init];
[(Animal*)ob run];//Animal在跑
ob = [[Dog alloc]init];
[(Dog*)ob run]; //Dog在跑
//注意id使用
//id类型的使用
id obj2;
obj2 = ani;
[obj2 run]; //Animal在跑
}
return 0;
}
复制代码
作者:
649685603
时间:
2015-12-7 21:32
看看吧
作者:
cbl16888
时间:
2015-12-7 21:41
挺好的哦.学习下
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2