再看基础OC基础视频

来源:互联网 发布:python base64 key 编辑:程序博客网 时间:2024/06/04 23:29

基础OC语法

  1. OC中的内存管理的内容是 堆区的集成自NSObject 的对象
  2. 对象值为nil时. 引用计数器为0时, 不回收.
  3. MRC下 set方法的写法
- (void)serCar:(Car *)car{    if(_car != car ){    //----- 1        [_car release];    // -----2        _car = [car retain];    }}
  • 注释 代码1 是为了避免如下情况
  Car *byd = [Car new];  [person setCar: byd];  [byd release];  [person setCar: byd];

将bydset两次, 如果不加 if(_car != car) 判断, 因为_car 和car 是同一个对象, 调用 [_car release] 方法时, byd已经被释放了, 调用 _car = [car retain]; 时会出现野指针错误.

  • 注释代码2, 是为了避免如下情况
Car *byd = [Car new];[person setCar: byd];  // ----4Car *bmw = [Car new];[person setCar:bmw];   //  ---- 5[byd release];[bmw release];[person release];
  • 因为set方法内部会将car retain 一次, 如果不加 [_car release]; 在执行代码4时, person的car指针指向byd. 而代码5后, person 的car指针指向bmw, 这就导致 byd 出现内存泄漏

  1. _weak 指向的对象被释放后, 系统会将 _weak的指针指向nil, 默认的指针就是强指针.
  2. 在ARC机制先, 对象释放的依据是 对象是否有强指针 指向该对象.
  - (void)xxxx{    Car *car= [Car new];}   //   ------- 1
  • 在1处 car 被释放了, 原因是局部变量 car释放了, 导致 car指向的 对象 没有了强指针指向, 所以对象被释放.

  1. 非正式协议, 本质就是给 Foundation框架中的类增加 category.

  2. 沙盒机制

    • document: 保存需要持久化的数据 会自动备份
    • Library/cache: 保存缓存文件, 不会备份
    • Library/ Preference: 保存应用所有的偏好设置. 会自动备份
    • temp 保存临时文件

  1. 把结构体包装成NSValue对象, 可以放到字典和数组里. 如可以吧 CGRect 包装成NSValue 类型 放到数组里.
MyStruct a = {19, 12};NSValue *v1 = [NSValue value1WithBytes:&a objectType:@encode(MyStruct)]; // 将自定的结构图转成 NSValueMyStruct b; [v1 getValue: &b]; // 将Value 转换成自定义的结构体

  1. copy
对象可变性 copy mutableCopy 对象不可变 不会开辟新地址 会开辟新地址 对象可变 开辟新地址 会开辟新地址
  1. 修饰符
    • public 任意程序集
    • protected 同一类和派生类
    • private 同一类中
@interface Car:NSObject{   int _spend;   // 使用这个方式声明成员变量 默认使用的是 protected}

  1. static

    • 修饰局部变量, 可以改变局部变量的作用域. 把局部变量作用域变成全局变量
    • 修饰全局变量, 可以在本文件中使用.

  2. 类对象存储
    Dog * d = [Dog new];
    []d run];

    1. 先将代码加载到代码区
    2. 如果是第一使用Dog 类, 则在堆区分配空间, 实例化Dog类对象DogClass, 类对象DogClass 的isa指针指向代码区的Dog类代码. 类对象中还包含 方法的映射表. 即 方法与方法地址的映射.
    3. 在堆区分配空间实例化Dog类 dInstance, dInstance的isa指针指向类对象.
    4. 在栈区分配空间, 创建变量d. 变量b的指针指向dInstance 的首地址.
    5. 调用run方法, 把run 封装层SEL, 在类对象的方法映射表里查找 run对于的方法地址. 如果找到了就调用,如果没找到就报错.
    6. 如果找到run方法, 就将找到的结果缓存起来, 以提高性能.

刀哥网络

  1. 1Byte (字节)= 8bit(位)
  2. 1Char = 1Byte
  3. 监听 nc-lk port 监听本机 端口请求.
  4. 从网络上拉去 PList 文件, 从NSData 转成plist 文件 方法
id result = [NSPropertyLIstSeriaLization propertyListWithData:data option: 0 format:NULL error:NULL];

  1. 加密
    • base64 将数据转成二进制文件, 按6位读取数据, 末尾不足补0, 每两个零 , 翻译成 等号, 在ios7.0 以后 增加了base64的支持.
    • 散列(哈希)算法, 又叫 数据摘要. 数据指纹, 不能反算. 有名的 md5, SHA1. SHA256, SHA512, 都是这类型的加密,
    • md5 特点1. 相同数据加密后得到的结果是一样的, 但是不同的数据, 哪怕是一点点的修改, 在结果上都有巨大的反差.
    • HMAC 需要自己设置一个密码. [self.passwordStr hmacMD5StirngWithKey:key] 先把key做一次散列加密,再 和密码一起做一次md5, 在加所一次散列加密, 再做一次md5.

  1. extern 表示字符串的具体内容在其他位置设置过值 (通常在.m) 中, 因为const的存在, 所以外部不能修改, 相当于声明了一个不可变得变量供外部使用
.hextern NSString *const UserloginNotif;.mNSString * const UserloginNotif = @"UserloginNotif";
原创粉丝点击