彳亍而行

Thinking will not overcome fear but action will.

从改变自己开始

——读《高效能人士的七个习惯》有感

按: 这篇文章本来是为了给我爱人交作业用的,所以有些地方的表述方式稍微夸张了一些,不过仍然准确的表达的我的意思。 对于这本书的前半段,即个人修养方面,我理解的比较深入,实践上做的也更好。但对于后半段,即公众领域的成功,我仍然需要一段很长的路要走,这个方面是我比较薄弱的地方。 不知道是不是错觉,最近感觉对于人生所谓“终极真理”有了理解,即“大道至简”,其实很多理论,都可以融会贯通,是一体...

一些iOS面试题答案

什么时候使用copy关键字? 在使用NSString、NSArray、NSDictionary时,经常用copy关键字。原因:这些类有对应的mutable子类,如果不用copy的话,有可能会在其它地方被修改,造成不可预知的后果; 什么时候使用weak关键字,和assign有什么不同? 在防止引用循环时,可以用weak来解决; 和assign的不同:(1)在对象释放掉后,weak的属性...

iOS RunLoop总结

为什么要有RunLoop 我们知道,一个线程,在整个生命周期中,很可能大部分时间都是没有事情可做的,有事情需要处理的时间总是比较短的。在没有事情处理的时候,线程应该怎么办呢?我们会希望它处于“休眠”状态,就是不要占用CPU资源,而在用到它的时候,再被“唤醒”。这种机制,叫作”Event Loop”,即事件驱动型的。 扯一点远的,在生活当中,我们也会喜欢这样的处理方式。比如,前段时间我不小...

iOS Runtime总结

缘起 学习Objective-C语言,如果只学一些表面的东西,死记一些特性,是无法深入学习了。而接触到runtime,就是进入了Objective-C语言的本质。在这里,Objective-C语言的特性,都可以得到解答,因为Objective-C的面向对象特性就是用Runtime方式实现的。 当年Objective-C的创始人在设计这门语言时,重点是为了实现在C语言基础上的扩展,以及借鉴...

iOS多线程总结

总览 iOS多线程开发的技术,主要包括pthread、NSThread、GCD、NSOperation;其中pthread/NSThread用的情况不多,而GCD和NSOperation用的比较频繁,所以是重点。 pthread pthread的全称叫POSIX Thread,是一个线程管理的通用规范,基本上所有的开发平台都有实现,所以用pthread实现的代码,其通用性比较强。然而p...

iOS内存管理的问题总结

retain/assign/strong/weak/copy的区别 这几个关键字在声明变量的时候经常遇到,那么它们有什么区别,应该如何选择呢? 这些关键字的主要区别,在于对内存的管理。 Objective-C的内存管理机制和引用类别 首先,要介绍一下Objective-C的内存管理机制。Objective-C对内存的管理,以一种叫做“retain count”的方式来管理。对于一个对...

weex-bluetooth:用Weex做蓝牙开发

用Javascript,一行代码搞定一台蓝牙设备

缘起 之所以做这个项目,是因为公司要尝试用Weex做开发,以减少开发工作量,达到一个人搞定前端的目标。设想当中,如果顺利的话,一个人可以同时搞定iOS/Android两端的开发,尤其是UI方面的开发。传统的工作方式中,同一个UI设计需要iOS/Android两个平台实现基本一致的开发,非常浪费。 在此过程中,因为业务需要,要能够连接蓝牙设备,而Weex本身(基本上)只提供UI层的封装。为...

多线程导致的iOS闪退分析

前段时间做了一个APP,在测试的时候遇到了很奇怪的闪退情况。 这个APP是有关声音处理的:设备一边录音,一边对声音进行处理。所以需要2个线程,一个线程将录音保存下来,另一个处理保存下来的声音。测试的时候,会在1~10min之内,不定时、无预兆的出现闪退的情况,报的错也各不一样,有的是 1)”NSGenericException ‘Collection was mutated while ...

算法优化:从1天到1s

最近参加了Coursera的课程,Stanford大学的《算法:设计与分析》。这是一门非常值得学习的课程。在老师布置的作业中,有这样一道题目: The goal of this problem is to implement a variant of the 2-SUM algorithm . The file contains 1 million integers, both posi...

为什么Dijkstra算法不适用边长为负数的情况?

Dijkstra算法(这个荷兰词真难读。。。不过Dijkstra是一位非常NB的计算机科学家,goto有害论、信号量和PV原语、哲学家聚餐问题、银行家算法等等,都是这位大牛搞出来的),是有向/无向加权图(就是每条边都有长度)中,计算两个点之间最短距离的有效方法,在使用堆排序的情况下,它的时间复杂度为O(Nlog(N+M)),(这里N代表节点数,M代表边数)很接近线性了,还是非常好的。 不过...