博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记录琐碎知识点
阅读量:5207 次
发布时间:2019-06-14

本文共 3265 字,大约阅读时间需要 10 分钟。

1、软件开发流程

  软件开发流程即软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法、软件的总体结构设计和模块设计、编程和调试、程序联调和测试以及编写、提交程序等一系列操作。

开发流程:

  需求分析。

  概要分析。

  详细分析。(具体模块所涉及到的主要算法、数据结构、类的层次结构及调用关系)

  编码。(实现各模块的功能,从而实现对目标系统的功能、性能、接口、界面等方面的要求)

  测试。

  上线。

  维护。

2、Runtime如何实现

  OC这个语言尽可能的将一些决定从编译器推迟到运行时,它会尽可能的动态处理事情,这意味着这个语言不仅需要一个编译器,还需要一个运行时系统,使得这个预言得以运行。Runtime简称运行时,就是系统在运行的时候的一些机制,其中最重要的消息机制对于C语言,函数的调用在编译的时候会决定调用哪个函数。编译完成之后直接顺序执行,无任何二义性。OC的函数调用成为消息发送,属于动态调用过程,在编译的时候并不能决定真正调用哪个函数(事实证明,在编译阶段,OC可以调用任何函数,即使这个函数并未实现,只要声明过就不会报错。而C语言在编译阶段就会报错)。只有在真正运行的时候才会根据函数的名称找到对应的函数来调用。

3、真机测试流程

(1)获取设别的UDID

(2)申请证书

  [1]注册设备UDID

  [2]下载证书

    <1>获取证书请求文件

    <2>用证书请求文件请求开发证书

    <3>安装开发证书

    <4>获取验证性文件

    <5>安装验证性文件

    <6>在Xcode中配置证书和验证性文件,然后在真机上运行

4、OC程序执行过程概述

  首先从硬盘load程序代码到内存。

  其次操作系统找到程序入口开始执行。

  再次在程序执行过程中进行内存的管理。主要需要四部分内存空间:

    堆区用来存放创建的对象。

    栈区用来存放局部变量。

    数据区用来存放静态变量和字符串变量。

    代码区用来存放代码程序。

5、OC类是怎么执行的

(1)当程序启动时,就会加载项目中所有的类,而且加载后会调用每个类的+load方法,只调用一次。

(2)当第一次使用某个类时,就会调用当前类的+initialize方法。

(3)先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方法,最后调用分类的+load方法)

(4)注意:在初始化的时候,如果分类重写了+initialize方法,则会覆盖掉父类的。

(5)重写+initialize方法可以监听类的使用情况。

6、RunLoop

RunLoop是时间接收和分发机制的一个实现。

RunLoop提供一种异步执行代码的机制,不能并行执行任务。
在主队列中,Main RunLoap直接配合任务的执行,负责处理UI事件、定时器以及其他内核相关事件。
RunLoop的主要目的:保证程序执行的线程不会被系统终止。

什么时候使用Runloop ?

当需要和该线程进行交互的时候才会使用Runloop。

每一个线程都有其对应的RunLoop,但是默认非主线程的RunLoop是没有运行的,需要为RunLoop添加至少一个事件源,然后去run它。

一般情况下我们是没有必要去启用线程的RunLoop的,除非你在一个单独的线程中需要长久的检测某个事件。

主线程默认有Runloop。当自己启动一个线程,如果只是用于处理单一的事件,则该线程在执行完之后就退出了。所以当我们需要让该线程监听某项事务时,就得让线程一直不退出,runloop就是这么一个循环,没有事件的时候,一直卡着,有事件来临了,执行其对应的函数。

Runloop,正如其名所示,是线程进入和被线程用来响应事件以及调用事件处理函数的地方。需要在代码中使用控制语句实现run loop的循环,也就是说,需要代码提供while 或者 for循环来驱动run loop。

在这个循环中,使用一个Runloop对象[NSRunloop currentRunloop]执行接收消息,调用对应的处理函数。

Runloop接收两种源事件:input sources和timer sources。

input sources 传递异步事件,通常是来自其他线程和不同的程序中的消息;

timer sources(定时器) 传递同步事件(重复执行或者在特定时间上触发)。

除了处理input sources,Runloop 也会产生一些关于本身行为的notificaiton。注册成为Runloop的observer,可以接收到这些notification,做一些额外的处理。(使用CoreFoundation来成为runloop的observer)。

Runloop工作的特点:

1> 当有事件发生时,Runloop会根据具体的事件类型通知应用程序作出响应;

2> 当没有事件发生时,Runloop会进入休眠状态,从而达到省电的目的;

3> 当事件再次发生时,Runloop会被重新唤醒,处理事件。

提示:一般在开发中很少会主动创建Runloop,而通常会把事件添加到Runloop中。

7、SVN的使用

首先,需要进行简单的配置

(1)创建代码仓库,用来存储客户端所上传的代码
(2)配置svn的用户权限
在创建的代码库目录下的conf目录中有三个文件,需要修改他们的内容
一个代表访问时候的权限
还有一个是添加用户名和密码
最后一个是配置用户组和权限
启动svn服务
(3)使用svn客户端功能
  [1]从本地导入代码到服务器(第一次初始化导入)
  [2]从服务器端下载代码到客户端本地
  [3]提交更改过的代码到服务器
  [4]更新服务器端的代码到客户端

8、git和svn的区别

(1)git是分布式的,svn不是

(2)git把内容按元数据方式存储,而svn是按文件
(3)git分支和svn的分支不同
(4)git没有一个全局的版本号,而svn有
(5)git的内容完整性要优于svn(git的内容存储使用的是哈希算法

9、UIViewController的生命周期

当一个视图控制器被创建,并在屏幕上显示的时候。代码的执行顺序:

(1)alloc            创建对象,分配空间

(2)init(initWithNibName)   初始化对象,初始化数据

(3)loadView          从nib载入视图,通常这一步不需要去干涉。除非你没有使用xib文件创建视图

(4)viewDidLoad        载入完成,可以进行自定义数据以及动态创建其他控件

(5)viewWillAppear        视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了

(6)viewDidAppear        视图已在屏幕上渲染完成

当一个视图被移除屏幕并且销毁的时候的执行顺序,这个顺序差不多和上面的相反

(1)viewWillDisappear     视图将被从屏幕上移除之前执行

(2)viewDidDisappear      视图已经被从屏幕上移除,用户看不到这个视图了

(3)dealloc            视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放

关于viewDidUnload:在发生内存警告的时候如果本视图不是当前屏幕上正在显示的视图的话,viewDidUnload将会被执行,本视图的所有子视图将被销毁以释放内存,此时开发者需要手动对viewLoad、viewDidLoad中创建的对象释放内存。因为这个视图再次显示在屏幕上的时候,viewLoad、viewDidLoad再次被调用,以便再次构造视图。

 

转载于:https://www.cnblogs.com/GhostKZShadow/p/5099657.html

你可能感兴趣的文章
Intellij idea
查看>>
WEB_点击一百万次
查看>>
word20161228
查看>>
CodeForces - 878A Short Program(位运算)
查看>>
Mysql聚簇索引和非聚簇索引
查看>>
Hive入门之UDFS函数
查看>>
python文件操作笔记
查看>>
泛型委托
查看>>
笔试题拾遗
查看>>
与虚拟机Oracle连接出现ora-12154问题的解决
查看>>
JavaScript对象(一)
查看>>
Sublime View In Browser
查看>>
linux下可执行程序如何定位共享库文件以及如何让系统找到用户指定的库
查看>>
FPGA机器学习之机器学习的n中算法总结1
查看>>
Bootstrap的js插件之轮播(carousel)
查看>>
linux自旋锁
查看>>
路冉的JavaScript学习笔记-2015年1月23日
查看>>
IPTABLES详解
查看>>
Linux 下tomcat 的重新启动
查看>>
利用node js 来创建一个服务器
查看>>