当前位置:网站首页>About static type, dynamic type, ID, instancetype

About static type, dynamic type, ID, instancetype

2022-07-06 18:51:00 InfoQ

Static type

  • When a pointer variable is defined as a specific object , Using static types , The class of this pointer variable is known at compile time , This variable always stores objects of a specific class , By default, all data types are static

 @interface Person : NSObject
 property (nonatomic,strong) NSString *name;
 -(void)run;
 @end
 @implementation Person
 -(void)run{
 NSLog(@"run");
 }
 @end
 int main(int argc, const char * argv[]) {
 Person *p = [[Person alloc]init];
 p.name = @"ABC";
 [p run];
 return 0;
 }

  • Characteristics of static data types :
  • You know the type of variable at compile time

  You know it at compile time p yes Person type

  • Know which properties and methods are in the variable

 @property (nonatomic,strong) NSString *name;
 -(void)run;

  • These properties and methods can be accessed at compile time

 p.name = @"ABC";
 [p run];

  • And if you define variables through static data types , If you access properties and methods that are not static data types , Then the compiler will report an error

null

Dynamic type

  • It refers to the class that the program does not determine the object belongs to until it is executed

 @interface Person : NSObject
 @property (nonatomic,strong) NSString *name;
 -(void)run;
 @end
 @implementation Person
 -(void)run{
 NSLog(@"run");
 }
 -(void)test{
 NSLog(@"test");
 }
 @end

 @interface Student : Person
 @property (nonatomic,assign) int age;
 -(void)eat;
 @end
 @implementation Student
 -(void)eat{
 NSLog(@"eat");
 }
 @end
 
 int main(int argc, const char * argv[]) {
 id obj1 = [[Person alloc]init];
 [obj1 run];
 id obj2 = [[Student alloc]init];
 [obj2 eat];
 return 0;
 }

  • Characteristics of dynamic data types :

  • At compile time, the compiler doesn't know the real type of the variable , The real type of it is known only at run time

 id obj1 = [[Person alloc]init];
 id obj2 = [[Student alloc]init];

id

The type and

instancetype

  • id
    type
  • id
    Is a common object type , It can point to objects belonging to any class , It can be understood as a universal pointer , amount to C Linguistic
    void*
    data type ,
    id
    It is also a dynamic data type , Can be used to define variables , As a function parameter , Return value as a function, etc
  • id == NSObject*
    ( Universal pointer )
  • NSObject*
      It's a static type
  • Because dynamic data types can call any method , So it's possible to call methods that don't belong to you , And no error is reported during compilation , So it leads to runtime errors
  • Use scenarios : polymorphic , Can reduce the amount of code , To avoid calling subclass specific methods, you need to force type conversion
  • id Type cannot use point syntax , Because point syntax is a feature of the compiler , and id Types are runtime characteristics
  • Try to use static types , Static types can detect errors earlier , Improve readability
  • instancetype
  • instancetype
    The true type of the object can be determined at compile time
  • instancetype
    Can only be used for return values
  • Custom construction method , Use the return value as much as possible
    instancetype
    , Do not use
    id 
原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207061101470449.html