我有一个简单的标签栏应用程序,在启动项目时,Xcode提供的模板之外没有任何代码。
我添加了一个新的UIViewController
,在其中添加了UITextView
,并将其中的文本从默认值更改为“控制台”之类的短文。 (Autolayout与否无关紧要。)
当我尝试使用UITextView
点按标签后运行应用程序(设备或模拟器 - iOS 9)时,它会冻结应用程序。即使经过很长一段时间,该应用程序也不会崩溃,但所有按钮在退出之前都会完全没有响应。
对于一个简单的单屏幕应用程序,同样的UITextView没有太多文字也是如此。
文本的数量很难确定,它大约是11个字符,但不完全基于长度(不完全基于视觉长度的不同字母的不同数量似乎导致它:11 a
'{{{ 1}}或i
会使其崩溃,m
也会崩溃,但aaaabbbbc
不会崩溃。
文字必须简单,归属文字永远不会导致挂起。
似乎在aaaabbbbcc
中被卡住了,我可以告诉它从下面第1行的指令到第26行并永远回到第01行(或至少几次通过)但是我不知道知道如何在Xcode的调试视图中内省汇编,所以我也遇到了调试问题。
objc_msgSend
为什么带有短文本的UITextView会导致应用挂起?
编辑:这个问题最初假设挂起只发生在libobjc.A.dylib`objc_msgSend:
01: 0x10c795800 <+0>: testq %rdi, %rdi
02: 0x10c795803 <+3>: jle 0x10c795850 ; <+80>
03: 0x10c795805 <+5>: movq (%rdi), %r11
04: 0x10c795808 <+8>: movq %rsi, %r10
05: 0x10c79580b <+11>: andl 0x18(%r11), %r10d
07: 0x10c79580f <+15>: shlq $0x4, %r10
08: 0x10c795813 <+19>: addq 0x10(%r11), %r10
09: 0x10c795817 <+23>: cmpq (%r10), %rsi
10: 0x10c79581a <+26>: jne 0x10c795820 ; <+32>
11: 0x10c79581c <+28>: jmpq *0x8(%r10)
12: 0x10c795820 <+32>: cmpq $0x1, (%r10)
13: 0x10c795824 <+36>: jbe 0x10c795833 ; <+51>
14: 0x10c795826 <+38>: addq $0x10, %r10
15: 0x10c79582a <+42>: cmpq (%r10), %rsi
16: 0x10c79582d <+45>: jne 0x10c795820 ; <+32>
17: 0x10c79582f <+47>: jmpq *0x8(%r10)
18: 0x10c795833 <+51>: jb 0x10c795871 ; <+113>
19: 0x10c795835 <+53>: movq 0x8(%r10), %r10
20: 0x10c795839 <+57>: jmp 0x10c795845 ; <+69>
21: 0x10c79583b <+59>: cmpq $0x1, (%r10)
22: 0x10c79583f <+63>: jbe 0x10c79584e ; <+78>
23: 0x10c795841 <+65>: addq $0x10, %r10
24: 0x10c795845 <+69>: cmpq (%r10), %rsi
25: 0x10c795848 <+72>: jne 0x10c79583b ; <+59>
26: 0x10c79584a <+74>: jmpq *0x8(%r10)
27: ... continues
内UITextView
,但是在进一步测试时,无论UIScrollView
是否存在,都会发生这种情况。