当前位置:网站首页>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
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 Linguisticvoid*
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 useid
边栏推荐
- AcWing 3537.树查找 完全二叉树
- 美庐生物IPO被终止:年营收3.85亿 陈林为实控人
- The role of applet in industrial Internet
- 2022.2.12
- Shangsilicon Valley JUC high concurrency programming learning notes (3) multi thread lock
- 44 colleges and universities were selected! Publicity of distributed intelligent computing project list
- Medical image segmentation
- 监控界的最强王者,没有之一!
- [Sun Yat sen University] information sharing of postgraduate entrance examination and re examination
- node の SQLite
猜你喜欢
裕太微冲刺科创板:拟募资13亿 华为与小米基金是股东
Self supervised heterogeneous graph neural network with CO comparative learning
SQL injection - access injection, access offset injection
Online notes
深度循环网络长期血压预测【翻译】
CSRF vulnerability analysis
10、 Process management
Tree-LSTM的一些理解以及DGL代码实现
基于蝴蝶种类识别
Alibaba cloud international ECS cannot log in to the pagoda panel console
随机推荐
DOM Brief
青龙面板最近的库
人体骨骼点检测:自顶向下(部分理论)
深度循环网络长期血压预测【翻译】
星诺奇科技IPO被终止:曾拟募资3.5亿元 年营收3.67亿
node の SQLite
Test 1234
Cobra quick start - designed for command line programs
AcWing 3537.树查找 完全二叉树
爬虫玩得好,牢饭吃到饱?这3条底线千万不能碰!
Docker安装Redis
test about BinaryTree
Test 123
A wearable arm device for night and sleeveless blood pressure measurement [translation]
celery最佳实践
Self supervised heterogeneous graph neural network with CO comparative learning
Describe the process of key exchange
Online notes
atcoder它A Mountaineer
基于ppg和fft神经网络的光学血压估计【翻译】