iOS 之 oc 概述

487 阅读2分钟

OC

基本类型

  • 标量类型
    • int, long, char, float, double .(unsigned)
    • integer(int/log), CGFloat(float/double)
    • BOOL(YES/NO)
  • 枚举
    • 数值
  • 衍生类型
    • array, struct, function, union

Foundation

  • NSNumber 将基本类型封装成对象;NSNumber 支持字面量
  • NSString,其字面量的写法类似于@"a string"
  • NSData & NSDate
    • NSData: 数据的二进制表示(bytes封装); Encoding&Decoding
    • NSDate:时间处理和日期表示;简单时间戳获取
  • NSArray
    • NSArray *array = @[@1, @2, @3]
    • 数组越界处理和nil保护
  • NSDictionary
    • 提供KV操作的系列功能
    • 注意nil保护
  • NSString、NSArray、NSDictionary 的属性要用copy
  • 集合的深浅拷贝

Define Class

  • 继承关系
  • 属性: property
    • ivar 成员变量
    • getter && setter
    • 修饰符: copy、strong、assign、weak的用法
  • 函数(method)
    • selector
    • 类函数和成员函数

category 和 Extension

  • category
    • 不能增加ivar
    • 增加类的功能
    • 分离类实现
  • Extension
    • 增加ivar
    • 主要用于接口分离
    • private

protocol

  • Protocols Define Messaging Contracts
  • 开闭原则, 抽象类的功能,隐藏具体实现类
  • 协议可以继承于其他协议
  • 协议的约束是比较弱的,往往只会产生警告,而不会影响最终编译的通过

Method Dispatch

  • 定义和实现
    • 函数重载(NO)函数覆写(YES)
    • 子类有父类的同名方法
      • 动态决议
      • 强行静态调用父类方法,可能crash
    • selector vs. method
      • selector 就是 char *
      • method 地址是函数地址
    • objc_msgSend
      • OC消息传递
      • 动态解析
    • method lookup
      • 继承链
    • Type encoding
      • 方法类型编码

image.png

Memory management

  • ARC : 自动引用计数
    • 手动调用 retain/release/autorelease
    • 内存管理困难,容易内存泄露和野指针
  • 引用计数和MRC
  • strong, weak , assign
    • ownership 和对象引用图
    • 最佳实现
      • 基本类型 assign
      • deltegate 用weak
      • NSarry、NSDictionary和NSString, block 用copy
      • 其他用strong
      • block 中self用weak打破循环引用
    • 避免引用环 A- strong-> B-strong -> C-strong-A
  • Autoreleasepool
  • 循环引用

Block

  • Block Type
    • inline block
    • global block
    • As a property && param
  • Capture Var
    • 值拷贝(指针则拷贝指针地址, const)
    • __block(heap var, mutable)
  • 避免循环引用
    • self->task->block->self
    • self->task->block->weakSelf

RunTime