再看基础OC基础视频

基础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];  // ----4
Car *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)]; // 将自定的结构图转成 NSValue
MyStruct 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];

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


6 extern 表示字符串的具体内容在其他位置设置过值 (通常在.m) 中, 因为const的存在, 所以外部不能修改, 相当于声明了一个不可变得变量供外部使用

.h
extern NSString *const UserloginNotif;
.m
NSString * const UserloginNotif = @"UserloginNotif";

7 json 是什么?
json 是特殊格式的字符串.


8 能被NSJSONSerialization 是一个转换 JSON 和 Foundation对象的类. 能被序列化的要求:
* 顶级节点 必须是一个NSArray, 或者 NSDictionary
* 所以的对象必须是NSString, NSNumber, NSArray, NSDictionary, NSNull.
* 所以字典的key都必须是 NSString
* NSNumber 不能为空, 或者去穷大

9 如何判断一个对象能否被而序列化?
可以使用方法[NSJSONserialization isValidJSONObject: obj] 判断是否可以序列化


10 HTTP HEAD 方法. head方法用于向服务器请求头部信息, 不请求数据信息. 可以用在下载大文件时, 先向服务器请求头部信息, 获取文件总大小, 再请求文件数据, 就可以实现,现在进度显示.

11 断点续传
1. 断点续传不能用缓存
2. 断点续传告诉服务器从哪里开始传

NSString *range = [NSString stringWithFormat:@"bytes=%lld-", localFileSize];
[request setValue:range forHTTPHeaderField:@"Range"];

3. 断点续传的状态码是206


12 静态库: 每个程序都有一个副本. 动态库, 内存中只有一个副本, 多个程序共用一个库.


13 request. Header 中字段以及解释
* User-Agent 告诉服务器客户端的类型
* Content-Type 传递数据的类型
* Range 断点续传时使用
* Authorization 身份验证


14 NSURLSessionConfig 字段介绍
* HTTPAdditionalHeader 一个session的全局头字段, 对于很多的请求都需要的头数据,可以使用这个字段统一设置
* allowsCellularAccess 允许蜂窝访问
* HTTPMaximumConnectionsPerHost 对于一个host的最大并发连接数, 默认是4


15 在给NSURLSession 设置代理的时候, Session会对代理有强引用, 为了避免循环引用, 在视图消失, 或者不不需要网络请求的时候, 使用 [_Session invalidateAndCancel]; _Session = nil; 一旦被调用, Session就不能用了

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Baby_come_here/article/details/78785548
个人分类: 基础OC
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭