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;
}

转载于:https://www.cnblogs.com/Rong-Shengcom/p/4947219.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值