Objective-C:003

158 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

特有语法

1.点语法

  • 作用:给属性赋值和取值,算是对调用setter方法时的优化

  • 本质:运行时把点语法转换成setter和getter方法

  • 格式

     ` 实例对象.去掉下划线的属性名 `
    
  • 两种情况

    • 给属性赋值

      对象名.去掉下划线的属性名=数据
      
      [对象名 set去掉下划线的属性名首字母大写:数据]
      
      //等价的,上面点语法,下面setter
      
    • 获取属性值

      对象名.去掉下划线的属性名;
      
      [对象名 去掉下划线的属性名];
      
      //同样等价
      
  • 注意

    • gettersetter方法的名称要符合规范
    • 要慎用,可能会造成无限递归而程序奔溃
    • 属性如果没有封装gettersetter的话,是无法使用点语法的,因为点语法本质是这两种语法

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方法的要求一样

原文链接