概要:
UITextField のサブクラス:
[UIColor colorWithRed:green:blue:alpha]
アプリ全体のクラッシュを引き起こす[UIColor greenColor]
問題なく正常に動作します
そんなことがあるものか?
答え:
結局のところ、問題は、layoutSubviews
使用していたメソッドを呼び出していたことが原因でしたcolorWithRed
。どうやらcolorWithRed
余分なメモリを割り当てているようで、その時点で問題が発生します。(コメントで指摘してくれた Johannes Fahrenkrug に感謝します。これは別のものかもしれません。以下を参照してください。)
詳細:
UITextField のサブクラスである ECTextField クラスで、次の呼び出しを行うとひどいクラッシュが発生します。
[self setTextColor:[UIColor colorWithRed:42/255.0 green:170/255.0 blue:42/255.0 alpha:0.8]];
アプリがフリーズしてハングし、しばらくすると次のエラーが表示されます。
SampleApp(58375,0x34f71a8) malloc: *** mach_vm_map(size=1048576) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
2013-11-14 22:25:11.929 SampleApp[58375:907] *** Terminating app due to uncaught exception 'NSMallocException', reason: '*** NSAllocateObject(): attempt to allocate object of class 'NSPathStore2' failed'
*** First throw call stack:
(0x2362012 0x2166e7e 0x2361deb 0x1b5bcf2 0x1b60148 0x1bdb7a6 0x120f8a3 0x10ccaf2 0x96b14e4 0x10cc84e 0x96b1542 0x130c42 0x120491 0x120308 0x10fb2dd 0x217a6b0 0x3dbfc0 0x3d033c 0x3d0150 0x34e0bc 0x34f227 0x34f8e2 0x232aafe 0x232aa3d 0x23087c2 0x2307f44 0x2307e1b 0x35647e3 0x3564668 0x10aaffc 0x798d 0x25a5)
libc++abi.dylib: terminate called throwing an exception
奇妙なことに、そのコード行を次のように置き換えると、すべてが正常に機能します。
[self setTextColor:[UIColor greenColor]];
その理由と、この問題を解決するために何ができるかを誰かが知っていますか?
助けてくれてありがとう、
エリック