gpt4 book ai didi

iphone - iPhone上的NSString drawAtPoint崩溃(NSString drawAtPoint)

转载 作者:行者123 更新时间:2023-12-03 15:57:52 25 4
gpt4 key购买 nike

嘿。我有一个非常简单的文本输出到缓冲系统,它将随机崩溃。 DAYS会很好,然后有时会在几分钟内崩溃几次。对于使用高级控件的其他人,调用栈几乎完全相同:
http://discussions.apple.com/thread.jspa?messageID=7949746
iPhone app crashed: Assertion failed function evict_glyph_entry_from_strike, file Fonts/CGFontCache.c

它在该行崩溃(在drawTextToBuffer()中也是如此):
[nsString drawAtPoint:CGPointMake(0,0)withFont:clFont];

我对“evict_glyph_entry_from_cache”的调用与紧随其后的中止调用相同。

显然这发生在其他人身上。我可以说我的NSString *在崩溃时非常好。我可以从调试器中读取文本。

static CGColorSpaceRef curColorSpace;
static CGContextRef myContext;
static float w, h;
static int iFontSize;
static NSString* sFontName;
static UIFont* clFont;
static int iLineHeight;

unsigned long* txb; /* 256x256x4 Buffer */


void selectFont(int iSize, NSString* sFont)
{
iFontSize = iSize;
clFont = [UIFont fontWithName:sFont size:iFontSize];
iLineHeight = (int)(ceil([clFont capHeight]));
}


void initText()
{
w = 256;
h = 256;

txb = (unsigned long*)malloc_(w * h * 4);

curColorSpace = CGColorSpaceCreateDeviceRGB();
myContext = CGBitmapContextCreate(txb, w, h, 8, w * 4, curColorSpace, kCGImageAlphaPremultipliedLast);

selectFont(12, @"Helvetica");
}

void drawTextToBuffer(NSString* nsString)
{
CGContextSaveGState(myContext);
CGContextSetRGBFillColor(myContext, 1, 1, 1, 1);
UIGraphicsPushContext(myContext);

/* This line will crash. It crashes even with constant Strings.. At the time of the crash, the pointer to nsString is perfectly fine. The data looks fine! */
[nsString drawAtPoint:CGPointMake(0, 0) withFont:clFont];
UIGraphicsPopContext();
CGContextRestoreGState(myContext);
}

它将与其他非unicode支持方法以及CGContextShowTextAtPoint();一起发生。调用栈也与此类似。

这是iPhone的任何已知问题吗?或者,也许是此原因之外的某种原因导致了此特定调用(drawAtPoint)中的异常?

最佳答案

void selectFont(int iSize, NSString* sFont)
{
iFontSize = iSize;
clFont = [UIFont fontWithName:sFont size:iFontSize];
iLineHeight = (int)(ceil([clFont capHeight]));
}

调用此函数后, clFont将被自动释放,因此不能保证与该函数无关的上下文仍然可以具有有效的 clFont。如果您打算以后使用它,则需要 -retain一个实例。
void selectFont(int iSize, NSString* sFont)
{
iFontSize = iSize;
[clFont release];
clFont = [[UIFont fontWithName:sFont size:iFontSize] retain];
iLineHeight = (int)(ceil([clFont capHeight]));
}

关于iphone - iPhone上的NSString drawAtPoint崩溃(NSString drawAtPoint),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2565495/

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