gpt4 book ai didi

ios - 将 UIImage 分配给 UIImageView.image 后崩溃

转载 作者:行者123 更新时间:2023-11-29 03:31:51 25 4
gpt4 key购买 nike

在我的代码中:

*.h文件

UIImageView*    imgFACE;
UIImage* imgF;
UIImage* imgG;

初始化:

imgF = [UIImage imageNamed: @"f.png"];
imgG = [UIImage imageNamed: @"g.png"];

UIImageView *img;
img = [[UIImageView alloc]initWithFrame:FACE_RECT];
[self addSubview:img];
self.imgFACE = img;
[img release];

在 drawRect 中,经常:

NSLog(@"[%@]", imgF);
if(something) self.imgFACE.image = imgF;
else self.imgFACE.image = imgG;

NSLog 的标准结果是:

[<UIImage: 0x5db6b0>]

有时这个简单的代码会产生崩溃,NSLog 的结果很奇怪:

[Length 4 (2 blocks, 1 used, block 0 is at 0) 4 0x146d22c0 
{ NSColor = "UIDeviceWhiteColorSpace 0 1";
NSFont = "<UICTFont: 0x1454fc00> font-family: \".HelveticaNeueInterface-M3\";
font-weight: normal; font-style: normal; font-size: 12.00pt";
NSParagraphStyle = "Alignment 0, LineSpacing 0, ParagraphSpacing 0,
ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0,
LineHeight 0/0, LineHeightMultiple 0, LineBreakMode 4, Tabs (\n 28L,\n 56L,
\n 84L,\n 112L,\n 140L,\n 168L,\n 196L,\n 224L,\n 252L,\n 280L,\n 308L,\n 336L\n),
DefaultTabInterval 0, Blocks (null), Lists (null), BaseWritingDirection -1,
HyphenationFactor 0, TighteningFactor 0, HeaderLevel 0";
NSShadow = "NSShadow {0, -1} color = {(null)}"; }

什么是对象?

崩溃日志:

0libobjc.A.dylib 0x3b393b26 objc_msgSend + 5
1NOM2 0x000ad7a5 -[PanelInfoView myTimerMethod] (PanelInfoView.m:527) + 309157
2Foundation 0x319a3ecd __NSFireTimer + 64
3CoreFoundation 0x30f8b0e7 <redacted> + 14
4CoreFoundation 0x30f8acff <redacted> + 782
5CoreFoundation 0x30f8909b <redacted> + 1210
6CoreFoundation 0x30ef3ce7 CFRunLoopRunSpecific + 522
7CoreFoundation 0x30ef3acb CFRunLoopRunInMode + 106
8GraphicsServices 0x35c14283 GSEventRunModal + 138
9UIKit 0x33795a41 UIApplicationMain + 1136
10NOM2 0x0006e44d main (main.m:25) + 50253

我认为这是内存泄漏的结果。imgF 和 imgG 只初始化一次。

这个 UIImage 发生了什么?

最佳答案

imgF = [UIImage imageNamed: @"f.png"];
imgG = [UIImage imageNamed: @"g.png"];

这两个都是自动释放的对象,

if(something) self.imgFACE.image = imgF;
else self.imgFACE.image = imgG;

如果某些内容为“否”,那么如果您幸运的话,imgG 就会被 imgFACE 保留,并且它还没有被释放,但是 imgF 仍然没有被任何人保留,所以在下一个 drawRect 上,它很确定它会在 NSLog 上崩溃(@"[%@]", imgF) 或仅打印其他对象(如果幸运的是在该地址上分配了该对象)。

使用:

imgF = [[UIImage imageNamed: @"f.png"] retain];
imgG = [[UIImage imageNamed: @"g.png"] retain];

并在dealloc中释放它们:

- (void)dealloc {
[imgF release];
[imgG release];

// cleanup other resources too

[super dealloc];
}

关于ios - 将 UIImage 分配给 UIImageView.image 后崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19667678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com