美文网首页
iOS 疯狂讲义(下)整理

iOS 疯狂讲义(下)整理

作者: 赫子丰 | 来源:发表于2019-08-21 15:12 被阅读0次

    1、响应者链

    First Responder --> First Responder 的视图控制器 --> 父容器 --> 父容器的视图控制器 --> UIWindow --> UIApplication --> 应用程序委托对象

    2、手势处理器

    UITapGestureRecognizer  (点击)
    UIPinchGestureRecognizer (捏合)
    UIRotationGestureRecognizer (旋转)
    UISwipeGestureRecognizer  (滑动,快速移动)
    UIPanGestureRecognizer (平移,慢速移动)
    UILongPressGestureRecognizer (长按)
    

    3、setting bundle

    Settings.Bundle支持六种配置项分别是:Title,MultiValue,Group,Slider,ToggleSwitch,TextField 。

    4、线程与进程

    参考:iOS开发 - 线程与进程的认识与理解

    • 线程是CPU调度(执行任务)的最小单位,是程序执行的最小单元;
    • 进程是CPU分配资源和调度的单位;
    • 一个程序可以对应多个进程,一个进程可以有多个线程,但至少要有一个线程,而一个线程只能属于一个进程;
    • 同一个进程内的线程共享进程的所有资源;

    5、同步锁

    参考:iOS 锁&线程安全

    为什么要用锁?

    • 为了保证多线程访问一块公共资源时,对资源的保护。或者说是多线程安全 or 线程同步,但是线程同步的实现并不是只有加锁才能解决,串行队列也是一种解决方式。

    锁通用使用步骤:

    //带❀的是一定要有的步骤。 
    ❀初始化锁 | 赋予一定参数
    ❀加锁 | 通过一定条件加锁
    等待 | 线程进入 wait 等待条件  
    ❀处理公共资源代码 { } 
    ❀解锁 | 给锁赋予条件
    销毁锁 & 锁的属性
    

    参考:iOS中保证线程安全的几种方式与性能对比

    6、后台运行-释放内存

    • 释放硬件:相机、蓝牙、相机
    • 网络请求 cancel
    • NSTimer 注销

    7、IP 地址和端口号

    参考:谈谈-IP地址和端口号

    IP地址是一个规定,现在使用的是IPv4,既由4个0-255之间的数字组成,在计算机内部存储时只需要4个字节即可。在计算机中,IP地址是分配给网卡的,每个网卡有一个唯一的IP地址,如果一个计算机有多个网卡,则该台计算机则拥有多个不同的IP地址,在同一个网络内部,IP地址不能相同。IP地址的概念类似于电话号码、身份证这样的概念。

    由于IP地址不方便记忆,所以有专门创造了域名(Domain Name)的概念,其实就是给IP取一个字符的名字,例如163.com、sina.com等。IP和域名之间存在一定的对应关系。如果把IP地址类比成身份证号的话,那么域名就是你的姓名。一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。

    其实在网络中只能使用IP地址进行数据传输,所以在传输以前,需要把域名转换为IP,这个由称作DNS的服务器专门来完成。 所以在网络编程中,可以使用IP或域名来标识网络上的一台设备。

    为了在一台设备上可以运行多个程序,人为的设计了端口(Port)的概念,类似的例子是公司内部的分机号码。规定一个设备有216个,也就是65536个端口,每个端口对应一个唯一的程序。每个网络程序,无论是客户端还是服务器端,都对应一个或多个特定的端口号。由于0-1024之间多被操作系统占用,所以实际编程时一般采用1024以后的端口号。 下面是一些常见的服务对应的端口:

    ftp:23,telnet:23,smtp:25,dns:53,http:80,https:443

    使用端口号,可以找到一台设备上唯一的一个程序。 所以如果需要和某台计算机建立连接的话,只需要知道IP地址或域名即可,但是如果想和该台计算机上的某个程序交换数据的话,还必须知道该程序使用的端口号。
    参考:IP,域名和端口号之间的联系

    8、push 通知

    开发iOS系统中的Push推送,通常有以下3种情况:

    • 1)在线Push:比如QQ、微信等IM界面处于前台时,聊天消息和指令都会通过IM自建的网络长连接通道推送过来,这种Push在本文中暂且称为“在线Push”;

    • 2)本地Push:这种就是最常见的iOS系统通知(作用相当于传统PC端的提示窗口,在iOS10以后全部整合到UserNotifications.framework框架了),不涉及任何网络数据,仅仅是让APP拥有一个统一系统通知方式而已,比如:闹钟的定时提醒等;

    • 3)离线/远程Push:这就是iOS程序员最熟悉的 APNs 这一套东西了,它使得APP处于后台或者被kill的情况下仍能收到网络通知,最常见的应场景就是IM聊天工具了。

    除此之外,还可以通过 MQTT 协议实现本地推送,绕过了苹果的 APNs ,但是也因此造成了后台无法收到通知的情况,除非申请了 VoIP 后台运行权限。
    参考:MQTT 本地推送

    相关文章

      网友评论

          本文标题:iOS 疯狂讲义(下)整理

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