黑马程序员——OC语言基础---id类型及应用场景
2015-10-06 17:54
489 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
id类型及应用场景
1、用NSObject访问子类对象方法
//需要强制转换,是静态类型
NSObject*obj = cat;
[(Cat*)objrun];
2、id类型
id是动态类型,程序只有在运行时才能确定它的具体类型。是指向哪个对象的。
id是一种通用的对象类型,它可以用来存储属于任何类的对象也可以理解为万能指针
注意 在id的定义中,已经包好了*号。id指针只能指向os的对象。
id类型的定义
Typedefstruct objcobject{
Class isa;
} *id;
局限性:调用一个不存在的方法,编译器会马上报错。
iOS5之后推出了instancetype类型
instancetype和id的异同
1)相同点都可以作为方法的返回类型
2)不同点
1,instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象;
2,instancetype只能作为返回值,不能像id那样作为参数,
3、id类型应用场景
//动物类
Animal *animal = [Animal new]; //狗的类,狗继承自动物
Dog *dog = [Dog new]; //猫的类,猫继承自动物
Cat *cat = [Cat new]; //定义id类型
id obj = cat; //id obj = dog;
[objrun];
id类型及应用场景
1、用NSObject访问子类对象方法
//需要强制转换,是静态类型
NSObject*obj = cat;
[(Cat*)objrun];
2、id类型
id是动态类型,程序只有在运行时才能确定它的具体类型。是指向哪个对象的。
id是一种通用的对象类型,它可以用来存储属于任何类的对象也可以理解为万能指针
注意 在id的定义中,已经包好了*号。id指针只能指向os的对象。
id类型的定义
Typedefstruct objcobject{
Class isa;
} *id;
局限性:调用一个不存在的方法,编译器会马上报错。
iOS5之后推出了instancetype类型
instancetype和id的异同
1)相同点都可以作为方法的返回类型
2)不同点
1,instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象;
2,instancetype只能作为返回值,不能像id那样作为参数,
3、id类型应用场景
//动物类
Animal *animal = [Animal new]; //狗的类,狗继承自动物
Dog *dog = [Dog new]; //猫的类,猫继承自动物
Cat *cat = [Cat new]; //定义id类型
id obj = cat; //id obj = dog;
[objrun];
<span style="font-size:14px;">#import <Foundation/Foundation.h> @interface Animal : NSObject -(void)run; @end @implementation Animal -(void)run{ NSLog(@"动物会跑"); } @end @interface Dog : Animal -(void)eat; @end @implementation Dog -(void)run{ NSLog(@"狗会跑"); } -(void)eat{ NSLog(@"狗在吃"); } @end int main(int argc, const char * argv[]) { @autoreleasepool { Animal *ani = [Animal new]; [ani run]; //动物在跑 // [(Dog *)ani eat];(错误的) Animal *an2 = [Dog new]; [an2 run]; //狗在跑 //NSObject访问了子类特有的方法 run NSObject *obj = [Animal new]; [(Animal*)obj run]; //动物再跑 //访问子类特有方法 obj = [Dog new]; [(Dog *)obj run]; //NSObjec是所有类的基类 //obj可以指向任何子类 Dog *dog = [Dog new]; //注意id的使用 //id类型的使用 id obj2; obj2 = ani; [obj2 run]; //动物再跑 obj2 =dog; [obj2 run]; //狗在跑 } return 0; }</span>
相关文章推荐
- Objective-C的内省(Introspection)用法小结
- Objective-C中常用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect实例分析
- Objective-C中NSNumber与NSDictionary的用法简介
- Objective-C中NSLog输出格式大全
- Swift调用Objective-C编写的API实例
- Swift、Objective-C、Cocoa混合编程设置指南
- Objective-c代码如何移植为Swift代码 Objective-c代码转移到Swift过程介绍
- Swift调用Objective-C代码
- 以实例讲解Objective-C中的KVO与KVC机制
- objective-c中生成随机数的方法
- 在Swift中使用Objective-C编写类、继承Objective-C类
- Swift能代替Objective-C吗?
- Objective-C 消息传递机制详解
- 在一个项目中同时使用Swift和Objective-C代码混合编程的方法
- vm安装mac os x 10.7 lion
- objective-c(一)
- objective-c(二)
- objective-c(三)
- objective-c(四)-基本数据类型以及循环和选择结构