又多出色原创艺文章,请关注果冻想。

大家好、 我是Dylan QQ 958226951 iOS Dev
3龙前, 收到了这按照宝贵的书写, 迫于驾照考试, 今天才开勾画读书笔记,
出版者抱歉啊抱歉啊抱歉啊。 哈哈哈哈哈 废话不多说 开始工作。

进程

过程表示一个正在运转的程序实例,它是分配资源的极其小单位,这种说法特别官方。

进程是一个深重要的东西,我们运行的系中又跑在N个进程,这些过程都以私下的干活着,我们编辑的代码,经过编译、运行,也会转变一个进程。这个历程由程序代码、数据、变量(占用着系统内存)、打开的文件(文件讲述称)和条件做。一般的话,对于Linux系统,系统会当经过中共享程序代码和网函数库,所以当任何时刻,内存中还单存在代码的同份副本。

是因为经过是事物如此的要,这首稿子就对准Linux中之经过展开一个骨干的总。

iOS开发工具

  1. 引言 不多说 经验 常识。
    · 纠错 page3. 手机上也起诸多底翻阅工具, 比如『Newsfy』 应该是
    Newsify吧?

2.Cocoapods 设置使用
· 镜像索引
<pre><code>pod repo remove master
pod repo add master
https://gitcafe.com/akuandev/Specs.git
pod repo update</code></pre>

· 使用cocoapods 打开终端 首先输入 cd 然后 三绝望手指
把您的蓝色工程名拖进去,删掉尾部就OK

· Podfile.Lock的意: 版本控制

· 创建自己的podSpec
<a href=”http://blog.jobbole.com/65721/"&gt;Link:
写podSpec文件</a>

· AppleDoc 怎么弄一下手: <a
href=”http://www.cnblogs.com/zyl910/archive/2013/06/07/objcdoc.html"&gt;博客链接&lt;/a&gt;

  1. 纱封包分析工具
    · Charles 需要JavaSE的安环境哦。 官网的版应该是6、
    <a href=”http://en.softonic.com/s/java-se-6:mac"&gt;JAVA SE
    6下充斥地址</a>

· 抓包iPhone包记得设置代理哦. 在同一网段.
· 这个家伙得以修改要参数, 显示也殊直观。 但是为一不胜一些初级的开发者,
在截取到这些请求地址 参数信息的时候 可以动用 VisualJSON VisualXML
来又操作。 方便多什么。
<a href=”https://itunes.apple.com/app/id617516344"&gt;VisualXML
Download</a>
VisualJSON
Download

· Map 映射、 突然见到Map这个东西 让我想到了 RestAPI、、、

  1. 界面调试工具
    说交界面, 就碰到了切图, 好多儿女想自己去开东西, 切图费事。
    告诉你们一个PS插件
    切图插件下充斥
    用完别忘了点个赞

· Reveal 以前见了, 第一坏相讲解。 真心不错 感谢 唐牛。 我啊以研究
就不吃大家吐槽了哈。
· 涉及到了单OpenSSH 上污染文书及手机。
OpenSSH
学习地方

  1. 动统计工具: FLurry 国内的友盟也不易啊。 AVOS推荐看看嘿嘿。
    BAAS的劳动现在发那么些。 都还不易。 跑偏了走偏了。 继续羁押。

极好之劳动 就是42页的 自定义统计项。 这个是啊,
但是我记得友盟的呢供了页面的顾统计。 但是没有这个自定义的精雕细刻。
可以帮住很多大型软件拿到第一的用户取向数据。

关于别的奔溃信息等等的东东,友盟貌似都有啊。 而且这个文档英文的,
对于那些休乐意加强英文水准的子女辈, 有早晚之难度啊。 我们不举行Low bee。

  1. 奔溃记录工具: 其实这东东 有得的食指去用吧。
    如果你公司只是眷恋略的笔录转, 你可捕捉奔溃信息, 然后形容副文件,
    下次起动达流传服务器哈哈。 你启动就崩溃 那我为无语了。。。

7.App annie. 统计工具
构成了苹果的数量, 详细的辨析了瞬间君App的状。
定要是注意维护自己之帐号安全, 去创造一个子企业主。
把此帐号提供给Annie去取你App的信。

  1. Xcode 插件

  2. 阿尔卡兹、、、 哈哈 这个老哥们了, 用来保管而的插件。
    安装不用说了咔嚓、 自己Google去. 打不起Google的, 下充斥个Chrome
    然后失去扩大里边找找红杏出墙 买同样年。 不值钱啊 100处女左右。

管理的方 唐牛说的良清楚哦, 自己看去 很简单的单击操作。
插件等 貌似在Xcode6.2.3 这些实物里边还得更去来。 Xcode6.1 6.0
5.1.1是通用可以的。
下的物 去Git一抄家, 全有啊 不做链接了
· KSImageNamed 唉、 最核心的插件了、 ide
· XVim 让你富有 Command line 的体会、、
不了您要熟悉那同样效东西才好使自如哦
· FuzzyAutocompletePlugin 各种补全
· XToDo 快速跨到公开标记的地方 俺记得 加TODO 是 control+shift+t 哈哈
· BBDebuggerTuckAway 自动隐藏下边的Debug窗口
· SCXcodeSwitchExpander 自动的为您加Switch里边的相同堆case
· deriveddata-exterinator 切换版本清理缓存的、
俺记得这按钮在右侧上角有正反的D撂一起的标识、 丑的老、
· VVDocumenter 这个毫无说了吧 /// 除了同积聚注释 可以生成AppleDoc的啊、
· ClangFormat 调整而的代码排版的
· ColorSense 这决不说了咔嚓、 很常用的、 选颜色
· XcodeBoost 代码修改小插件、 有那么点小意思、 可以尝尝一下。

  1. 其余工具介绍
    · MAC系统自带的 取色计、、 不说了无说了 傻瓜式的家伙 打开就见面因此、
    · ImageOptim 压缩图像 很牛逼的、 去了解一下 Download
    Here
    · 马克鳗、、、 这个为美工用之、、 不说了不说了
    · Dash 查查查 各种查、 快捷方便
    · 蒲公英、 发布你用之、 把您的应用发到一个地方、
    大家好下载安装、 不错哦、 草根程序员的聚集地。 哈哈 算俺一个
    算俺一个。
    · 命令行工具 我单所以iTerm 别的 看不起 哈哈、 用这个代表终端
    、 nomad 管理而的开发者帐号的、 可以快速的当该地添加设备、
    操作证明、 一切操作吧、
    、 xctool 编译 测试、 我当开活动构建的早晚 用了之事物。 但是 最终
    自动构建只能构建我之小demo 工程总是出code sign的问题。。。 头疼啊、
    后来同时莫名的好了。 郁闷郁闷。 唐牛也关乎了机动构建,
    这种事物我们当下做的是一个网络电话,
    他要是自行的变好多代理商的版, 他们唯独Logo 名称 不等同。
    别的还同样、、、 单位即使做活动构建、 貌似如抓一令专门的MAC
    服务器嘿嘿。
    、 appleDoc 在最为初步 我管课发你们了。

创立一个过程

故事还是优先打创造一个过程开始。看看下面的代码:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{
    pid_t pid;
    char *msg;
    int n;

    printf("Fork program starting\n");
    pid = fork(); // 创建一个进程

    // 创建完成以后,父进程和子进程都从这里开始运行
    switch (pid)
    {
        case -1:
            perror("Fork failed.");
            exit(EXIT_FAILURE);

        case 0:
            // 当fork返回值为0时,表示这是子进程
            msg = "This is the child";
            n = 2;
            break;

        default:
            // 当fork不为0和-1时,表示这是父进程
            msg = "This is the parent";
            n = 3;
            break;
    }

    for (; n > 0; --n)
    {
        printf("%s\n", msg);
        sleep(1);
    }

    exit(EXIT_SUCCESS);
}

俺们以fork函数创建一个子过程,fork函数的宣示如下:

#include <unistd.h>
pid_t fork(void);

fork函数返回一个pid_t类型的价值,pid_t类型就是一个int类型。当调用fork创立进程成功之后,子进程与父进程同时都打fork函数之后的代码开始运行。那么既都由与一个地方开始运行,如何区分是分支进程要父进程呢?

Linux中凡是运fork的返值来展开分的,方法如下:

  • 当fork返回pid_t的价值吗-1时时,就意味着创建过程出现了错;
  • 当fork返回pid_t的值也0时,就表示是子进程;
  • 当fork返回pid_t的价值未呢0同-1不时,就象征是父亲进程。

每当上头的代码中,我虽是依据fork的归来值来判断是子进程或父进程的。怎么都醒的怪怪的。

iOS开发实践

  1. 引用计数这个东西、 MRC、 其实现在此ARC已经是早晚了、
    大家逐渐的召开MRC->ARC的搬吧。 每天转一点、 强壮你代码、
    相信苹果、 那些MRC的啃老族最终会答应为温馨的匪小心、 不留心 死的挺惨。
    更何况、 现在iOS8.0上述版本的安装量已经来60%差不多了、 iOS7
    的用户发30%大多、 只生非顶10%底用户还当就此iOS6.0或者以下、 所以、
    告诉你们的小卖部、 那有用户 抛弃吧哈哈。。。
    有点不负责任。。。嘿嘿、、、 sorry、 使用宏定义去化解这些坑吧、
    参考FMDB里边的arc 非arc的解决办法哦、

· 注意 : 循环引用的问题 相互有 你跨在马去战斗、 马说 你死我才会挺、
战士说、 你特别我啊够呛、、、、、 2总人口谁还无先充分。。。。。 都老不了。。。
多坑爹啊、、、 内存就这么走了、、、 __weak __strong __block、、、

· Xcode 自带的片段内存泄露检测工具。
· CoreFoundation 对象的内存管理。 我个人是地方比较软。
也于日益的触及更多的平底东西 学习中、、、

  1. GCD、 多线程、

此NSOperation啊 看起对、 其实就是吃GCD包了同等交汇、 直接以GCD
会重便民。
详尽代码 很简答、 哈哈 Google去Google去、
此地唐牛带我们体会了一下Block、 Block可以理解呢函数指针、
可以为此clang-rewrite去看Block的源码、 然后你就是秒懂了、
就是一个保着函数指针结构体。
这里就要干到有的东西 比如__weak . 哈哈、 弱引用、 或者
__block修改block之外的变量。

·后台运行
<pre><code>var bgTask:UIBackgroundTaskIdentifier!

func applicationDidEnterBackground(application: UIApplication) {
    self.beginbACK()
    // your 
    self.endBack()
}

func beginbACK () {
    bgTask = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({ () -> Void in

        self.endBack()
    })
}

func endBack () {

    UIApplication.sharedApplication().endBackgroundTask(bgTask)
    bgTask = UIBackgroundTaskInvalid
}</code></pre>

—– 今天先到这里 明天从12章UIWindow开始读

进程的布局

又说一样不成,进程非常重大,我们需要去领悟,那么对经过的组织即只好说了。那么我们采取fork创了一个历程以后,该过程在内存内部的构造是怎么样的为?我们来探。

图片 1

经过内存映像

设达到图所示,我们于实际编码时连没设想到图被所说的这些情节,而落得图被所著的物,却是明父亲进程和子进程的要,关于进程的浩大问题,我们呢是依据上图出发进行考虑的。在后头,我会专门以出几只问题来分析为什么进程内存映像这样重要。

过程调度

以单个处理器上,同一时间只能发出一个历程可以运行,其它进程都处在等候运行状态。但是,我们实际上的觉得是一模一样时刻发生差不多只过程在“同时”进行运作,这是为什么吗?

操作系统会分吃每个过程一定的运行时,叫做“时间片”。进程在这个“时间片”内运行,由于“时间片”非常之紧缺,这样便让丁一如既往种植多单程序于以运行的假象。操作系统是如何调度进程的也罢?进程调度的规则来很多,比如根据先级进行调度算法,先进先出调度算法等。

Linux内核进程调度器是因进程的先级来拓展过程调度的。优先级赛之进程运行得更频繁。

过程状态

Linux上经过有5种状态:

  1. 运作(正在周转或在运转班中等候)
  2. 停顿(休眠中, 受阻, 在待某个条件的形成或者收受到信号)
  3. 不得中断(收到信号不提醒和不可运行, 进程要待直到有暂停发生)
  4. 僵死(进程早已住, 但进程描述符存在,
    直到大进程调用wait4()系统调用后获释)
  5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后终止运行)

当我们利用ps -aux指令查看过程状态时,那些标识进程的假名又是什么意思啊?,具体的长河状态的字符标识如下表所示:

状态标志 状态描述
D 不可中断
R 运行
S 中断
T 停止
Z 僵死

然而,有的上,我们尚见面相局部别的标识,例如:

状态标志 状态描述
W 僵死
< 高优先级进程
N 低优先级进程
L 内存锁页

看来上面又是搁浅啊,不可中断啊,停止啊,僵死啊,直接晕死,那么到底安知道这些概念呢?

  1. 运行状态
    在Linux中,仅等待CPU时间之进程称为就绪进程,它们让停放在一个运行班中,一个妥善进程的状态标志位为TASK_RUNNING。一旦一个运行着之经过时片用完,
    Linux内核的调度器会剥夺这个过程对CPU的控制权,并且由运行班中选取一个恰当的进程投入运作。

  2. 困状态
    Linux中之历程睡眠状态来些许栽:

    • 一律种植是只是暂停的睡状态,其状态标志位TASK_INTERRUPTIBLE;
    • 任何一样种植是不可中断的睡眠状态,其状态标志位为TASK_UNINTERRUPTIBLE。

    然暂停的睡状态的进程会睡觉直到有条件变为真,比如说有一个硬件中断、释放过程正在等的系统资源或是传递一个信号都可以是唤醒进程的原则。不可中断睡眠状态及可间歇睡眠状态类似,但是它们产生一个差,那便是把信号传递至这种睡眠状态的过程不能够转其的状态,也就是说它不应信号的提醒。不可中断睡眠状态一般比较少用到,但每当有的特定情景下这种状态还是生有因此底,比如说:进程必须等,不能够吃中止,直到有特定的波闹。

    当朝经过发送一个SIGSTOP信号,它就会见因响应该信号而进入TASK_STOPPED状态(除非该过程本身处于TASK_UNINTERRUPTIBLE状态而非应信号)。(SIGSTOP与SIGKILL信号一样,是生强制的。不允用户进程经过signal系列之系统调用重新安装相应之信号处理函数。)
    朝过程发送一个SIGCONT信号,可以为该由TASK_STOPPED状态回升到TASK_RUNNING状态。

  3. 僵死状态
    经过在剥离的长河被,处于TASK_DEAD状态。在这离过程遭到,进程占有的保有资源以吃回收,除了task_struct结构(以及个别资源)以外。于是进程就不过剩下task_struct这么个空壳,故曰僵尸。

    故保留task_struct,是因为task_struct里面保存了经过的退出码、以及一些统计信息。而其父亲进程非常可能会见关切这些信息。比如以shell中,$?变量就保存了最终一个脱离的前台进程的退出码,而者退出码往往让作if语句的论断标准。
    本来,内核也得以用这些信息保存在别的地方,而将task_struct结构释放掉,以节约一些空间。但是采取task_struct结构更为有利于,因为当本中已成立了自pid到task_struct查找涉,还有进程之中的父子关系。释放掉task_struct,则用树立有初的数据结构,以便让父亲进程找到她的子进程的离消息。

    翁进程可以由此wait系列的系统调用(如wait4、waitid)来等待某个或少数子进程的离,并取其的退消息。然后wait系列的系统调用会顺便将子进程的遗骸(task_struct)也释放掉。

    分进程在脱离的历程中,内核会叫其父亲进程发送一个信号,通知父亲进程来“收尸”。这个信号默认是SIGCHLD,但是在经过clone系统调用创建子进程时,可以装是信号。

    透过下的代码能够打一个EXIT_ZOMBIE状态的过程:

      if (fork())  while(1) sleep(100);
    

    使用ps -aux即见面相如下一条僵死进程的信。

    仅仅如父亲进程不脱,这个僵尸状态的子进程就一直在。那么只要爸爸进程退出了呢,谁而来给子进程“收尸”?

    当进程退出的时刻,会以它的所有子进程都托管给别的进程(使的成为别的进程的子进程)。托管给哪个也?可能是脱过程四方进程组的生一个进程(如果在的话),或者是1声泪俱下经过。所以每个过程、每时每刻都生大进程有。除非她是1哀号经过。

总结

啊,这首文章总结了多情,大体上还是有些若当大学操作系统课就该学会的东西。好吧,我大学操作系统课都在睡觉,导致本还要写这么一首文章来复习这些东西,罪过,罪过。

2015年1月13日 于深圳。

还多漂亮原创艺文章,请关注果冻想。