要点:
在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]];
有谁知道为什么会这样,我可以尝试解决这个问题?
感谢您的帮助,
埃里克
答案 0 :(得分:6)
将其更改为
[self setTextColor:[UIColor colorWithRed:42.0f/255.0f green:170.0f/255.0f blue:42.0f/255.0f alpha:0.8f]];
颜色对象的组件,指定为0.0到1.0之间的值。
答案 1 :(得分:6)
问题是你有一个无限循环。
如果您在[self setTextColor:
子类的layoutSubviews
中致电UITextField
,则会创建无限循环,因为setTextColor
会导致再次调用layoutSubviews
:UITextView setTextColor changes layout in UITableViewCell
这就是错误出现需要一段时间的原因:应用耗尽内存。您可以通过使用Instruments运行它来验证这一点。
切勿从触发layoutSubviews
的{{1}}调用任何内容。
答案 2 :(得分:1)
创建颜色类别是最好的。您可以在任意数量的地方重复使用代码。
如果按command+n
,则会显示文件选项Category
。从那里选择或创建名为UIColor+custom.h
的{。}文件和名为.m
的{{1}}
在UIColor+custom.m
文件中定义一个方法:
.m
并在+ (UIColor *)myColor
{
return [UIColor colorWithRed:42.0/255.0 green:170.0/255.0 blue:42.0/255.0 alpha:0.8];
}
文件中声明此方法:
.h
现在在+ (UIColor *) myColor;
中导入此类别,如下所示:
viewController
现在给你的UITextField文字颜色如下:
#import "UIColor+custom.h"
希望这有帮助。