IOS ——OC——id数据类型的使用范围
(1)id数据类型
- 通用的指针类型
- 没有*号
- 可以指向一个任何类的对象(设置是nil),而不关心其具体类型
- 在运行时检查具体类型
- 可以对其发送任何(存在的)消息
- 不能访问属性(可以通过用[]来访问)
(2)静态数据类型
-类型*对象名称
总是存储特定的数据类型那个
编译器在编码阶段进行语法检查
例如:
定义两个类,一个为Animal为父类,一个为cat为子类
@interface Animal : NSObject
{
}
- (void)eat;
@end
@implementation Animal
- (void)eat
{
NSLog(@"吃东西");
}
@end
@interface Cat : Animal
{
}
- (void)run;
@end
@implementation Cat
- (void)run
{
NSLog(@"跑起来了");
}
@end
//这个函数是专门用来喂动物的
void feed(Animal *animal)
{
[animal eat];
}
int main()
{
Cat *d = [Cat alloc]init];//d为指向狗类型的指针
feed(d);//可以传值d给feed函数的参数
Animal *a=[Animal alloc]init];//a为指向动物类型的指针
feed(a);//可以传值a给feed函数的参数
Animal *c=[Cat alloc]init];//将一个Cat对象的地址赋值给动物类型的指针c
[c run];//这里就是多态的局限性,父类Animal中并没有定义run方法,父类类型的变量 不能用来调用子类的方法
feed(c);
return 0;
@interface Animal : NSObject
{
}
- (void)eat;
@end
@implementation Animal
- (void)eat
{
NSLog(@"吃东西");
}
@end
@interface Cat : Animal
{
}
- (void)run;
@end
@implementation Cat
- (void)run
{
NSLog(@"跑起来了");
}
@end
//这个函数是专门用来喂动物的
void feed(Animal *animal)
{
[animal eat];
}
int main()
{
Cat *d = [Cat alloc]init];//d为指向狗类型的指针
feed(d);//可以传值d给feed函数的参数
Animal *a=[Animal alloc]init];//a为指向动物类型的指针
feed(a);//可以传值a给feed函数的参数
Animal *c=[Cat alloc]init];//将一个Cat对象的地址赋值给动物类型的指针c
[c run];//这里就是多态的局限性,父类Animal中并没有定义run方法,父类类型的变量 不能用来调用子类的方法
feed(c);
return 0;
}
感谢您的访问!
若对您有帮助或有兴趣请关注博客:http://www.cnblogs.com/Rong-Shengcom/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!