动态数据类型以及对象的初始化

2018-11-05  本文已影响0人  SimpleSJ

1.动态数据类型

/*
     静态数据类型的特点: 
     在编译时就知道变量的类型, 
     知道变量中有哪些属性和方法
     在编译的时候就可以访问这些属性和方法, 
     并且如果是通过静态数据类型定义变量, 如果访问了不属于静态数据类型的属性和方法, 那么编译器就会报错
     弊端: 多态中,用父类的指针指向了子类的对象,如果要调用子类特有的方法,必须强转
*/
     动态数据类型的特点:
     在编译的时候编译器并不知道变量的真实类型, 只有在运行的时候才知道它的真实类型
     并且如果通过动态数据类型定义变量, 如果访问了不属于动态数据类型的属性和方法, 编译器不会报错,同时这也是动态数据类型的弊端,容易在运行时崩溃.
     不要滥用动态数据类型.

2.new方法的实现原理

  • alloc也是做了三件事(苹果文档中描述): 1.开辟存储空间 2.将所有的属性设置为0 3.返回当前实例对象的地址
  • 默认情况init的实现是什么都没有做,它只是返回初始化后的实例对象的地址
  • 注意:alloc返回的地址, 和init返回的地址是同一个地址
@interface Person : NSObject
@property   int age;
@end

//控制器中调用
//下面两句的作用是等价的

//分成下面一种写法的原因我认为有二:1.规范编码格式 2.便于自定义构造方法
//-(instancetype)initWith.... 固定格式
  Person *p1 = [Person new];
  Person *p2 =[[Person alloc]init];
上一篇 下一篇

猜你喜欢

热点阅读