自学笔记1 | 青训营笔记

159 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第3天

OC自学笔记1 | 青训营笔记

类:OC中,本质是一个自定义的数据类型

  1. 三要素:
    1. 名字:抽象
    2. 特征:属性
    3. 行为:方法
  2. 声明
    1. @interface 类名: NSObject{成员变量/字段/属性(共同特征)}
    2. 方法声明
    3. @end
  3. 实现
    1. @implementation 类名
    2. 方法的实现
    3. @end
  4. 创建
    1. 类名 *对象名 = [类名 new];
    2. Person *p = [Person new];
  5. 赋值
    1. p->name = @"jack";
      1. 需要在声明时写@public,所有属性均可访问
    2. (*p).nane = @"jack";
  6. 对象/实例方法
    1. 声明:- (返回类型)方法名称:(参数类型)形参名称1 :(参数类型)形参名称2;
      1. 函数名称为:"方法名称::"
      2. - (void)run;
      3. - (void)eat:(NSString*)name;
    2. 实现
      1. - (void)run{}
      2. - (void)eat:(NSString*)name{}
    3. 调用
      1. [p1 run];
      2. [p1 eat:@"排骨"];
      3. [p1 sum:num1 :num2];
      4. 在方法内调用其他方法[self  方法名]
      5. self代表当前对象
    4. 方法可以访问对应对象的属性
  7. 类方法
    1. 声明:+ (返回类型)方法名称:(参数类型)形参名称1 :(参数类型)形参名称2;
    2. 调用:
      1. [类名 类方法];
      2. [Person 类方法];
    3. 规范
      1. 提供和类同名的类方法(小写),方法创建对象返回类的对象
        1. 类似构造方法
      2. new也是类方法,实际进行4步操作
        1. 申请空间
        2. Isa指针指向代码段,类的代码
        3. 初始化
        4. 返回对象地址
  8. 规范
    1. 属性名以_开头
    2. 方法名
      1. 一个参数xWithX
      2. 多个参数xWithX:(类型)形式参数1 and:(类型)形参名称2
      3. [p1 sumWith:10 and:20]
  9. 存储
    1. 类加载:当类第一次被访问时,会将类存储到代码段
      1. 访问类
        1. 创建对象
        2. 声明类的指针变量
    2. 对象的存储
      1. 声明Person* p
        1. 类指针变量p:在栈存储地址
      2. [Person new]
        1. 在堆内存申请空间,创建对象(根据类的模板)
          1. 属性是对象,储存的是指向对象的指针,而不是生成一个对象,默认为nil
        2. 对象中还有另外一个属性:isa,是个指针,指向代码段中类代码的地址
        3. 初始化
          1. 基本数据类型:赋值为0
          2. C语法的指针类型:赋值为NULL
          3. OC的类指针类型:赋值为nil
        4. 返回对象的地址
      3. 方法:通过isa指针,到代码段中找,多个对象共用同一个
  10. 多文件开发
    1. Cocoa class自动创建.m和.h
  11. 多个target
    1. 一个target中的类,无法直接在另一个target中访问

类与结构体

  1. 封装:结构体只能封装数据,类可以封装方法
  2. 存储:局部变量结构体在栈,对象在堆空间
    1. 栈空间相对小,访问效率相对高
    2. 堆空间相对大,访问效率相对低