- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我今天遇到了一个相当有趣的 exc_bad_access 崩溃。经过大量挖掘,我得出了以下信息(在模拟器中运行):
如果我只是运行代码,应用程序会在将数据加载到我的托管对象时随机崩溃。据我所知,当我将数据加载到托管对象时它总是崩溃——而不是在从我的 JSON dict 转换为数据到实际使用的对象的部分(从字符串和 NSNulls 到 ints/floats 和 nils)
当然,随机崩溃是有害的,所以我尝试在调试器中逐步完成整个过程,但事实证明这并不实用——我正在处理很多对象,所以一个接一个地逐步完成它们只是没有用。所以我决定添加一些 NSLogs 来跟踪流程并尝试以这种方式发现模式。
立即解决了崩溃。
进程中任何位置的一个 NSLog 都可以防止崩溃。
我最终追踪了堆栈跟踪并发现了实际问题:我在线程环境中访问托管对象,但不是从关联的 MOC 的 performBlockAndWait: 方法中访问。那时,崩溃对我来说非常明显——我很震惊我之前没有遇到更多问题。我愿意打赌,在拥有 2-3 个对象的“小”测试数据集和使用 NSLogs 调试代码之间,错误在早些时候被有效地掩盖了……但问题仍然存在:
为什么 NSLog 可以防止应用程序崩溃?一段没有副作用的代码究竟如何改变应用程序其余部分的执行?这毫无意义!
最佳答案
令人惊讶的是,这是一种相当普遍的情况:我不止一次看到在看似无关的地方启用日志记录会立即解决其他地方的计时问题。
原因是 NSLog
与许多其他输出函数一样,具有内部同步。在某处有一个互斥锁可以保护对 NSLog
内部缓冲区的访问,无论是在 NSLog
本身还是在它使用的 I/O 库之一中。这种同步使调用者能够从多个线程使用 NSLog
。正是这种同步改变了程序的时间,影响了竞争条件并最终解决了崩溃问题。
关于ios - NSLogs 如何使代码不崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15934004/
我是 Mac OS 编程的新手。我想知道 NSLog 在哪里定义? 最佳答案 在NSObjCRuntime.h文件中: FOUNDATION_EXPORT void NSLog(NSString *f
我不明白这里发生了什么。我有一个按钮连接到 AppDelegate 中的以下操作: - (IBAction)openWindow:(id)sender { self.winCon = [[NS
#import int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePo
我有一个 Xcode 项目,我已经工作了几个月了。我从来没有遇到过 NSLog 问题,但升级到 Xcode 4.2 后,控制台上不会记录任何内容。我什至尝试将其放入 viewDidLoad 中:
首先,当我使用 nslog 记录数组的内容时,为什么数组中的某些对象(所有字符串)都有引号,而有些则没有? 日志将如下所示: "Item 1", "item 2", item3, "item4" 这引
我很不幸地提交了一个 NSLog 仍然处于事件状态的应用程序。它很少触发,但我想知道我的应用程序因此被拒绝的可能性有多大? 我不是在问如何抑制 NSLogs。我已经知道该怎么做了。它只是一个错误进入的
我正在尝试使用 NSLog 来打印控制台消息。问题是有时我在调用它时收到“EXC_BAD_ACCESS”错误 -(void)willRotateToInterfaceOrientation:(UIIn
我的 Mac OS X 应用程序中有以下代码行: NSLog(@"number of items: %ld", [urlArray count]); 我收到警告:“格式指定类型‘long’,但参数类型
与 NSLog 功能最接近的 Core Foundation 函数是什么? 最佳答案 CFShow() 类似,但没有前缀。或者,正如 wbyoung 所说,使用 NSLog()。如果您不想使用 Obj
NSNumber *weekNum = [dictionary valueForKey:@"inSeasonFor"]; NSDecimalNumber *newWeekNum = ([weekNum
我目前正在开发一个低功耗蓝牙应用程序,我想在其中使用 NSLog 来打印我收集到的信息。 这是我在 didUpdateValueForCharacteristic 方法末尾使用的代码,此时所有属性都已
当我尝试用它NSLog我的图像时; NSLog([images description]); 这出现了: 2012-06-05 10:31:38.801 Project1[1180:1a303] (
我如何准确地检测对象的坐标,例如名为“content”的 View ,并将其输出到日志中?感谢您的帮助! 最佳答案 你也可以这样做 NSLog(@"position: %@",NSStringFrom
-(void) print { NSLog(@"%i/%i", numberator, denominator); } Fraction *myFraction = [Fraction n
我有一部连接到 Xcode 的 iPhone。我在主页上有一个 NSLog(@"test")。当我从 Xcode 构建(运行)我的应用程序时,我看到它正在调试区域打印 test。 然后...我从设备屏
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improv
这个问题在这里已经有了答案: 关闭 10 年前。
我是 Objective-C 的新手,我开始学习简单的东西。在本例中,我想使用 * 符号创建一个 金字塔。 问题:每次打印 * 时,它都包含一个换行符。我怎样才能摆脱它来创建金字塔外观?我以为我必须添
我在 IBAction 中有以下代码。我想测量 AVSpeechSynthesizer 运行一个方向列表所花费的确切时间。但是,executionTime 会立即记录,而不是在循环结束时记录(返回不到
我想从两个日期之间添加的核心数据中检索所有条目。我正在使用 NSPredicate。由于我没有得到正确的结果,我尝试记录日期。它显示了以前的日期。谷歌搜索了一段时间后,我添加了 [dateFormat
我是一名优秀的程序员,十分优秀!