小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
特有语法
1.点语法
-
作用:给属性赋值和取值,算是对调用setter方法时的优化
-
本质:运行时把点语法转换成setter和getter方法
-
格式
` 实例对象.去掉下划线的属性名 ` -
两种情况
-
给属性赋值
对象名.去掉下划线的属性名=数据 [对象名 set去掉下划线的属性名首字母大写:数据] //等价的,上面点语法,下面setter -
获取属性值
对象名.去掉下划线的属性名; [对象名 去掉下划线的属性名]; //同样等价
-
-
注意
getter和setter方法的名称要符合规范- 要慎用,可能会造成无限递归而程序奔溃
- 属性如果没有封装
getter和setter的话,是无法使用点语法的,因为点语法本质是这两种语法
2.使用@property关键字
- 作用:自动生成setter和getter方法的声明和实现
- 基本语法格式:
@property 数据类型 名称 - 注意:
- @property声明时去掉下划线
- 也可以批量生成多个
3.静态类型和动态类型
- 区别: 指针指向它本来对应的类型的对象的情况就是静态 指针指向与它不对应的类型的对象的情况就是动态
4.万能指针
NSObject-C- 要调用子类独有的方法要进行类型转换
id指针- 只能调用对象的方法,不能使用点语法
- 定义时已添加了*
5.id类型和instancetype类型
- id类型
- 无类型的指针,仅仅是一个地址
- 即可以声明指针变量,也可以作为参数,还可以作为返回值
- instancetype类型
- 有类型,代表当前类的对象
- 只能作为方法的返回值
6.动态类型检测
暂空
7.构造方法
- 把init方法称为构造方法
1.概述
alloc方法
- 分配内存空间
- 返回对象的地址
init方法
- 初始化对象
实际开发中,经常使用[[类名 alloc]init]来新建对象
2.重写init构造方法
格式
-(instancetype)init{
if(self=[super init]){
//初始化的代码
}
return self;
}
小解释一下
- 调用父类的init可以初始化父类的属性
- 调用完父类的init之后,返回初始化成功的对象,实际上就是当前对象
3.自定义构造方法
- 返回值必须是
instancetype类型 - 方法名称必须
initWith开头 - 方法的实现和重写init方法的要求一样