iOS命令行符号化crash文件

打开命令行输入:

找到symbolicatecrash工具的路径,可能会花去一些时间,OSX 10.10.5 安装xcode7下的结果是:

遇到Error: “DEVELOPER_DIR” is not defined,处理:

把.ipa改名.zip解压以后得到.app文件,.app.dSYM文件,对应的crash文件方法到一个目录下,运行:

符号化到当前目录的crashlog.log文件中
配置符号化工具到命令行:

以后这么用:

最后方便大家使用,我用gem写了命令行工具,crash_analysis,打开终端运行

 

多用派发队列,少用同步锁

来源 ——《Effective Objective-C 2.0 》Matt Galloway

在OC中,如果有多个线程要执行同一份代码,那么有时可能会出现问题。这种情况下,通常要使用锁来实现某种同步机制。在GCD出现之前,有两种方法,第一种是采用同步块(synchronization block):

这种写法会根据给定的对象,自动创建一个锁,并等待块中的代码执行完毕。执行到这段代码结尾处,锁就释放了。在本例中,同步行为所针对的对象是self。这样写通常没错,因为它可以保证每个对象实例都能不受干扰地运行其synchronizedMethod。然而,滥用@synchronized(self)则会降低代码效率,因为公用同一个锁的那些同步块,都必须按顺序执行。若是在self对象上频繁加锁,那么程序可能要等另一段与此无关的代码执行完毕,才能继续执行当前代码,这样做其实并没有必要。

另一个方法是直接使用NSLock对象:

也可以使用NSRecursiveLock这种”递归锁”(recursive lock),线程能够多次持有该锁,而不会出现死锁(deadlock)现象。
这两种方法都很好,不过也有其缺陷。比方说,在极端情况下,同步锁会导致死锁,另外,其效率也不见得很高,而如果直接使用锁对象的话,一旦遇到死锁,就会变得非常麻烦。 继续阅读多用派发队列,少用同步锁