静态类型

  • 一个指针变量界说为特定的政策时,运用的是静态类型,在编译的时分就知道这个指针变量所属的类,这个变量总是存储特定类的政策,默许情况下一切的数据类型都是静态数据类型

    @interface Person : NSObject
    property (nonatomic,strong) NSString *name;
    -(void)run;
    @end
    @implementa指针变量p进行自加运算tion Person
    -(void)run{
    NSLog(@"run");
    }
    @e指针式万用表的使用办法图解nd
    int main(int argc, const char * argv[]) {
    Person *p = [[Person alloc]init];
    p.name = @"ABC";
    [p run];
    return 0;
    }
    
  • 静态数据类型的特征:

    1. 在编译的时分就知道变量的类型
    编译时就知道p是Person指针式万用表的使用办法图解类型
    
    1. 知道指针数学变量中有哪些特征和办法
    @property (nonatomic,strong) NSStr指针的拼音ing *name;
    -(void)run;
    
    1. 在编译的指针c语言时分就能够拜访这些特征和办法
     p.name = @"ABC";
    [p run];
    
    1. 而且假如是经过静态数据类型界说变量,假如拜访了不归于静态数据类型的特征和办法,那么编译器就会报错

    关于静态类型、动态类型、id、instancetype

动态类型

  • 指程序直到执行时才确认政策所属的类
    @interface Person : NSObject
    @property (nonatomic,strong) NSString *name;
    -(void)run;
    @end指针变量和指针的差异
    @implementation Person
    -(void)run{
    NSLog(@"run");
    }
    -(void)test{
    NSLog(@"test");
    }
    @en指针变量和指针的差异d
    @interface Stude变量之间的联系nt : Person
    @property (nonatomic,指针变量作为函数参数assign) int age;
    -(void)eat;
    @end
    @implementation Student
    -(void)eat{
    NSLog(@"eat");
    }
    @end
    int main(int argc, const ch指针变量ar * argv[]) {
    id obj1 = [[Person alloc]init];
    [ob指针变量的类型j1 run];
    id obj2 = [[Student alloc]init];
    [obj变量的界说2 eat]变量名;
    return 0;
    }
    
  • 动态数据类型的特征:
  1. 在编译的指针变量中寄存的是时分编译器并不知道变量的实在类型,只要在作业的指针的拼音时分才知道它的实在类型
    id obj1 = [[Person alloc]init];
    id obj2 = [[Student alloc]init];
    

id类型与instancetype

  • id类型

    • id是一种通用的政策类型,它可变量的界说以指向归于任何类的政策,可理解为万用指针,相当于C言语的void*数据类型,id也是一个动态数据类型,能够用来界说变量,作为函数参数,变量泵作为函数返回值等等

      • id == NSObject*(全能指针)
      • NSObject* 是一个静态类型
    • 指针式万用表怎样读数为动态数据类型能够调用恣意办法,所以有或许调用到不归于自己的办法,而编译时又不报错,所以导指针变量的界说致作业时差错
    • 运用场景:多态,能够减少代码量,避免调用子类特有的办法需求强制类型转化
    • id类型不能运用点语法,由于点语法是编译器的特性,而id类型是作业时的特性
    • 尽量运用静态类型,静态类型能够更早的发现差错,行进可读性
  • instanc指针数学etype

    • instancetype在编指针数学译时就能够判别政策的实在类型
    • instancetype只能用于返回值
    • 自界说的构造办法,返回值变量与函数尽量运用instancetype,不要用id