静态类型
-
一个指针变量界说为特定的政策时,运用的是静态类型,在编译的时分就知道这个指针变量所属的类,这个变量总是存储特定类的政策,默许情况下一切的数据类型都是静态数据类型
@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; }
-
静态数据类型的特征:
- 在编译的时分就知道变量的类型
编译时就知道p是Person指针式万用表的使用办法图解类型
- 知道指针数学变量中有哪些特征和办法
@property (nonatomic,strong) NSStr指针的拼音ing *name; -(void)run;
- 在编译的指针c语言时分就能够拜访这些特征和办法
p.name = @"ABC"; [p run];
- 而且假如是经过静态数据类型界说变量,假如拜访了不归于静态数据类型的特征和办法,那么编译器就会报错
动态类型
- 指程序直到执行时才确认政策所属的类
@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; }
- 动态数据类型的特征:
- 在编译的指针变量中寄存的是时分编译器并不知道变量的实在类型,只要在作业的指针的拼音时分才知道它的实在类型
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
-