多个线程在访问同一个非线程安全对象时,有可能会crash.
非线程安全对象:
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Multithreading/ThreadSafetySummary/ThreadSafetySummary.html
解决crash的方法可以用threadDictionary或者加锁.
加锁会造成线程阻塞,用threadDictionary会造成内存增加.根据实际情况取舍.
用threadDictionary:不再访问同一个不安全的对象,而是每一个线程都拥有一个对象,既可以提高效率(一个线程创建一次该对象就够了),也可以保证不crash.
+ (NSDateFormatter *)currentDateFormatter
{
NSMutableDictionary *threadDictionary = [[NSThread currentThread] threadDictionary] ;
NSDateFormatter *dateFormatter = [threadDictionary objectForKey: @"DDMyDateFormatter"] ;
if (dateFormatter == nil)
{
dateFormatter = [[NSDateFormatter alloc] init] ;
[dateFormatter setLocale: [[[NSLocale alloc] initWithLocaleIdentifier: @"en_GB"] autorelease]] ;
[dateFormatter setDateFormat: @"YYYY-MM-dd HH:mm:ss ZZZ"] ;
[threadDictionary setObject: dateFormatter forKey: @"DDMyDateFormatter"] ;
}
return dateFormatter ;
}
PS: NSDateFormatter在iOS7以后已经成了线程安全的类.
分享到:
相关推荐
iOS多线程经典崩溃总结大全 iOS开发中多线程崩溃是非常常见的,下面将总结一些经典的崩溃场景和解决方法: 1. Block回调崩溃: 在MRC环境下,使用Block来设置下载成功的图片。当self释放后,weakSelf变成野指针,...
多线程和并发编程中的同步问题可能导致未定义的行为,从而引发崩溃。无侵入的 crash 防护框架可能包含检测并修复这些问题的机制,比如通过锁或者其他并发控制手段来确保数据一致性。 5. **日志记录与崩溃报告**: ...
iOS Crash日志收集上报 iOS Crash日志收集上报是指在iOS系统中,收集和上报...iOS Crash日志收集上报是指在iOS系统中,收集和上报应用程序崩溃日志的过程,涉及到Mach异常、Unix Signal、NSException等多个技术层面。
iOS系统Crash文件分析方法参考 iOS系统Crash文件分析是指在iOS设备上发生崩溃时,如何对崩溃日志进行分析和诊断,以确定崩溃的原因和解决方案。下面将对iOS系统Crash文件分析方法进行详细介绍。 一、...
4. **线程安全检查**:检测多线程环境下的同步问题,防止数据竞争和死锁。 5. **代码风格与规范**:根据Apple的编程指南检查代码风格,保持代码的一致性和可读性。 除了上述功能,godeyes还可能提供其他的分析报告...
9. **多线程同步**:在多线程环境下,对共享资源的访问需要正确同步,避免竞态条件和死锁。可以使用GCD的`dispatch_semaphore`、`@synchronized`关键字或NSLock等机制来确保线程安全。 10. **测试与调试**:进行...
综上所述,iOS程序异常crash的捕获与拦截涉及到多个层面,从基础的异常处理机制到高级的日志分析和第三方工具的利用。开发者应当结合源码和工具,构建一套完整的异常管理体系,确保应用的稳定性和用户体验。在实际...
2. **多线程与 CPU 使用率**:合理地利用多线程可以提高 CPU 的利用率,但在设计时需要注意避免过多的线程切换导致的性能下降。 3. **线程优先级**:通过设置线程的优先级,可以在一定程度上控制线程的执行顺序。 4....
9. **多线程分析**:崩溃日志会显示每个线程的状态,这对于分析多线程问题非常有用。开发者需理解GCD、NSOperationQueue等并发机制,结合日志分析可能的竞态条件或死锁。 10. **调试与复现**:拿到崩溃日志后,...
- pthread 是 POSIX 线程的缩写,是一组标准库函数,用于支持多线程编程。 - pthread 在 Unix、Linux 和 macOS 系统中广泛使用,也适用于 iOS 开发环境。 - pthread 提供了高级别的线程管理功能,如创建线程、...
在iOS开发过程中,Crash日志分析是一项至关重要的任务,它可以帮助开发者找出应用程序中的错误,提升软件的稳定性和用户体验。Xcode作为Apple官方的开发工具,内置了强大的Crash日志分析功能,使得开发者能够有效地...
从应用加载到启动事件(launch)之间,包括了多个阶段,如dylib加载、类初始化(initialize)、对象实例化等。在load和launch之间,尤其是动态库加载阶段,可能会发生各种未预期的问题,导致启动crash。 **启动...
当一个iOS应用程序崩溃时,系统会创建一份crash日志保存在设备上。这份crash日志记录着应用程序崩溃时的信息,通常包含着每个执行线程的栈调用信息(低内存闪退日志例外),对于开发人员定位问题很有帮助。 为保障线...
- **知识点概述**:iOS开发过程中,锁机制是实现多线程同步的重要手段之一。常用的锁机制包括互斥锁(`@synchronized`)、读写锁、NSLock、NSRecursiveLock等。 - **哪个性能最差**:通常情况下,互斥锁`@...
- 多线程:学习GCD(Grand Central Dispatch)和NSOperation等多线程编程技术,提高应用的响应性和效率。 - 动画效果:使用Core Animation等框架创建流畅且吸引人的动画效果。 2. **跨平台开发**: - 使用React ...
对于"闪退"这类问题,定位可能更复杂,因为它们可能是由多线程冲突、资源耗尽、非法操作等原因引起。此时,开发者可能需要借助调试工具(如Xcode的Instruments,或GCD的Dispatch Queues调试)来检查线程状态、内存...
9. **性能优化**:针对iOS 9.2的性能特点进行优化,如内存管理、多线程处理和能源效率,确保应用流畅运行。 10. **错误报告与Crash Logs**:当应用在真机上遇到问题时,收集设备的Crash Logs可以帮助定位和解决问题...
4. **线程信息**:崩溃通常发生在某一线程,线程信息有助于识别问题是否与多线程编程有关。 5. **其他信息**:如用户操作、系统状态等,可能为问题分析提供额外线索。 分析崩溃日志时,首先要看异常类型,然后逐个...
- **多线程与异步编程**:为了提高应用程序的响应速度和用户体验,开发者需要掌握多线程和异步编程的技术。本书将介绍如何使用 Grand Central Dispatch (GCD) 和 Operation Queues 来实现多线程编程。 #### 四、...