2019笔记

2019笔记

  • OC中的super是查找父类的方法列表,完成后消息接收者还是当前对象。因为super和self的消息接收者都是自己,

  • 如果要指定情况下才触发KVO,则使用下面方法
    在要监听对象的.m中实现如下方法

    // 不自动触发KVO,采用手动模式
    + (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key {
        return NO;
    }
    

    然后在指定情况下,实现方法

    [self willChangeValueForKey:@"name"];
    self.object.name = @"ddd";
    [self didChangeValueForKey:@"name"];
    
  • KVO监听的是属性的set方法

  • self代表此方法的调用者,不能简单地认为就是此类,为什么方法中能用self_cmd,原因在于消息发送机制,objc_msgSend(obj,SEL,param),第一个和第二个参数就是self_cmd这两个隐藏参数。

  • 如何用KVO监听对象的所有属性?

    + (NSSet<NSString *> *)keyPathsForValuesAffectingValueForKey:(NSString *)key {
        return [super keyPathsForValuesAffectingValueForKey:key];
    }
    
    
  • KVO如何监听数组元素的变化?

    NSMutableArray *array = [_school mutableArrayValueForKey:@"classes"];
    [array addObject:@"中二班"];
    
  • 链式编程思想
    在自定义类HMPerson里添加方法

    - (HMPerson * (^)(void))deletename {
        return ^id() {
            return self;
        };
    }
    
  • 学习Masonry源码
    mas_makeConstraints包裹的布局代码放到数组中,在最后通过install全部执行一遍。
    通过学习Masonry源码,我学会了链式编程的基本思想,抽象类(MASConstraint)的使用————子类如果没重写父类方法,父类便抛出异常
    补充:可以通过点语法调用对象方法

  • 同步加主队列卡死的原因

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dUDuDaBf-1690701738124)(2019%E7%AC%94%E8%AE%B0%20a3affff77e884fa2806adf7fb6517526/Untitled.png)]

  • GCD dispatch_barrier_async

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Ct76XRv-1690701738125)(2019%E7%AC%94%E8%AE%B0%20a3affff77e884fa2806adf7fb6517526/Untitled%201.png)]

  • GCD快速迭代方法

    /**
    * 快速迭代dispatch_apply */
    - (void)apply {
          dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
          NSLog(@"apply---begin");
          dispatch_apply(6, queue, ^(size_t index) {
              NSLog(@"%zd---%@",index, [NSThread currentThread]); 
          });
          NSLog(@"apply---end"); 
    }
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ryWCqNN1-1690701738125)(2019%E7%AC%94%E8%AE%B0%20a3affff77e884fa2806adf7fb6517526/Untitled%202.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uOOIfr71-1690701738126)(2019%E7%AC%94%E8%AE%B0%20a3affff77e884fa2806adf7fb6517526/Untitled%203.png)]

  • GCD信号量

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ZLWtJ7o-1690701738126)(2019%E7%AC%94%E8%AE%B0%20a3affff77e884fa2806adf7fb6517526/Untitled%204.png)]

  • 当短时间内一个事件触发很多次的时候,可以用dispatch_source_merge_data(联结)来处理。
    当同一时间,一个事件的的触发频率很高,那么Dispatch Source会将这些响应以ADD的方式进行累积,然后等系统空闲时最终处理,如果触发频率比较零散,那么Dispatch Source会将这些事件分别响应。

  • 需求:label1label2的字数不固定,需求是,无论label2字数多少,label1都不能被拉伸或者压缩

    需要给label1设置一下优先级

  • 两个有名的视频播放器,都基于FFmpeg

    kxmovie

    ijkplayer

  • MVVM的理解:vc负责把VM绑定到View上,还负责处理各种点击事件,监听事件等等,VM负责处理模型数据并让view更新数据,View负责布局视图

  • 为什么iOS的视图需要UIViewCALayer共同完成?
    因为CoreAnimation框架是iOS和MacOS都可以用的,CALayer可以共用,但是逻辑控制的UIView不能共用,因为Mac是键盘控制的,iPhone是触控的,逻辑处理不一样

  • UI状态保存和恢复
    在APP在后台被杀死后,可以通过UIStateRestoration来保存当前状态,下次打开恢复

    iOS UI状态保存和恢复

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值