美文网首页
17.3.24备忘录

17.3.24备忘录

作者: cdd48b9d36e0 | 来源:发表于2017-03-24 16:49 被阅读9次

1、为什么通知必须在dealloc里移除(02-UITableview(4))

一个addServer会在通知中心里产生一个指针指向该通知的观察者,如果dealloc的时候不移除,那么只要通知被再次触发通知中心就会根据这个指针也就是地址去给这个观察者发送消息,这其实就是操作野指针了

2、setValuesForKeysWithDictionary的实现原理(03-UI进阶(1))

  1. 遍历所有的key得到key的值name
  2. 去模型查找有没有setName:方法,有的话直接赋值 setName:name
  3. 假如没有该set方法,就去模型中查找有没有_name属性,有的话_name = name
  4. 假如没有_name,就去模型中查找有没有name属性
  5. 假如还是没有,就会报错

第二步setName:这里只要求名字一样,后面的参数类型是可以替换的(0609-UIPickerView键盘处理)

3、一个IOS程序启动步骤(03-UI进阶(2))

  • 第一步加载main.m文件
  • 创建UIApplication
  • 创建UIApplicationDelegate,并且成为UIApplication代理
  • 开启主运行循环,保持程序一直在运行
  • 加载info.plist,判断有没有指定main.stroyboard,指定了就加载(这里判断的方法就是看General→DeploymentInfo→MainInterface有没有指定)
  • 第二步加载main.stroyboard(如果有的话),如果没有就用代码实现
  • 创建窗口
  • 加载main.storyboard,并且加载main.storyboard指定的控制器
  • 把新创建的控制器作为窗口的根控制器,让窗口显示出来

4、事件的传递(03-UI进阶(5))

点击一个控件让他响应指定的操作,这个事件会经历产生、传递、响应三个过程:

  • 事件的产生
    发生触摸事件后,UIApplication会把该事件加入到事件队列中,然后取出事件队列最前面的事件,交给主窗口(KeyWindow),去找到最合适的View响应事件

  • 事件的传递(核心)
    首先要明确一点:事件的传递是从父控件到子控件的。
    其次,这个过程只做了一件事:怎么找到最合适的那个View响应事件。🍎已经提供了一个专门来做这件事的Api:

 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    // 调用系统的做法去寻找最合适的view,返回最合适的view
    return [super hitTest:point withEvent:event];
}

实际项目中,需求通常是要点击一个控件让另外一个控件响应,这时候就需要重写hitTest方法。重写分为三步,第一步是判断自己能不能响应事件,包括打开用户交互、hidden、alpha三个方面;第二步是触摸点在不在自己身上;第三部是倒序遍历子控件,重复前两步,直到找到最合适的View,这是一个递归的过程。

 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
//    NSLog(@"%@--hitTest",[self class]);
//    return [super hitTest:point withEvent:event];
    
    NSLog(@"%@--%@",[self class],NSStringFromCGPoint(point));
    // 1.判断当前控件能否接收事件
    if (self.userInteractionEnabled == NO || self.hidden == YES || self.alpha <= 0.01) return nil;
    
    // 2. 判断点在不在当前控件
    if ([self pointInside:point withEvent:event] == NO) return nil;
    
    // 3.从后往前遍历自己的子控件
    NSInteger count = self.subviews.count;
    
    for (NSInteger i = count - 1; i >= 0; i--) {
        UIView *childView = self.subviews[i];
        
        // 把当前控件上的坐标系转换成子控件上的坐标系
     CGPoint childP = [self convertPoint:point toView:childView];
        
       UIView *fitView = [childView hitTest:childP withEvent:event];
        if (fitView) { // 寻找到最合适的view
            return fitView;
        }  
    }
    // 循环结束,表示没有比自己更合适的view
    return self;
}
  • 事件的响应
    响应与传递相反,在找到最合适的View后,从这个View开始沿着响应者链条往上传递事件做出响应。
  • 一个事件允许有多个响应者
  • 当前响应者为控制器的View时,他的上一级响应者就是控制器本身,否则就是父控件
  • 一个控件的响应方法(也就是touch方法)默认是什么都不做只是把事件抛给上一级响应者。所以重写了touch方法后,要想继续抛事件的话必须调用super touch方法,否则事件就到此停下不会继续往上响应了

5、环信(16-环信(总结))

登录注册模块要注意的:自动登录、自动联网、自动连服务器
好友管理模块:获取、添加、删除好友(包括数据库结构,第一次登录或者改变好友后从服务器拉取好友保存到数据库,以后每次都是从本地数据库拉取好友列表)

相关文章

  • 17.3.24备忘录

    1、为什么通知必须在dealloc里移除(02-UITableview(4)) 一个addServer会在通知中心...

  • 17.3.24

    最痛苦的是夹在未来与现在之间,却又无法轻意改变现在。若珍视现在,则不免影响未来。现在自身的渺小,无法应对诸多外界的...

  • 17.3.24

    这个地方的阴天下雨天真多啊。你有把伞不带,突然又拿出,别人一定会嚷你虚伪。你再明明白白展示你的小破伞,他们却会不依...

  • 17.3.24

    将clrscr();替换成 system("cls"); 再加#include 头文件 C语言中的sleep()...

  • 17.3.24 夜

    从开学到现在都维持着一个状态:懒 懒得早起,懒得运动,懒得好好打扮自己,懒得去背单词,懒得和朋友打电话,懒得对陌生...

  • 【早报】17.3.24

    1.微信上线“微信指数”功能 用户在主界面搜索框里输入“微信指数”、“xxx微信指数”、“微信指数xxx”均可以得...

  • 17.3.24 人到中年的成熟

    这一年多来,我真的长大了。 我的身边发生的事,我收到的信息,突然间变得跟过去不一样了。 一年来,我的身边总听闻有人...

  • /17.3.24/ 睹图悟字

    周末是工作休息时,确是学习开始时。 选择开始,风雨兼程!加油! 周末英文类的东西需要完成两个,中文的一个,基于我个...

  • #【17.3.24】抓取有用的;正向循环

    Objective 你对今天学的记得什么? 《国际金融》 英镑贬值,变穷,英国的商业环境失去吸引力 禁止移民,不利...

  • 设计模式 | 备忘录模式及典型应用

    本文的主要内容: 介绍备忘录模式 示例 备忘录模式总结 备忘录模式 备忘录模式经常可以遇到,譬如下面这些场景: 浏...

网友评论

      本文标题:17.3.24备忘录

      本文链接:https://www.haomeiwen.com/subject/fxufottx.html