gpt4 book ai didi

ipad - 为什么我不能在应用程序不崩溃的情况下释放我的 CTFramesetter?

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:19:37 25 4
gpt4 key购买 nike

我正在构建一个 iPad 应用程序,它呈现来自 NSAttributedString 的文本页面。我创建了一个像这样的框架 setter :

- (void)renderTextFromAttributedString:(NSAttributedString *)string
{
CFAttributedStringRef attrString = (CFAttributedStringRef)string;
framesetter = CTFramesetterCreateWithAttributedString(attrString);
CFRelease(attrString);

...然后代码添加新的页面 View ,一个接一个,然后将 framesetter 指针传递给每个页面以呈现每个页面,直到没有字符为止:

- (void)drawNewPage
{
CTSinglePageView *newPage = [[CTSinglePageView alloc] initWithFrame:newFrame];
newPage.delegate = self;
[newPage renderWithFramesetter:framesetter fromIndex:currentIndex margins:self.margins];
[self addSubview:newPage];
[newPage release];
currentPage ++;

...等等 现在这一切都很好,呈现页面并完美显示格式化文本。但是,在渲染过程结束时,我仍然有一个需要清除的 CTFramesetter,因此我可以构建下一组页面。但是,如果我这样做

    if(framesetter) CFRelease(framesetter);

在流程结束时,CTFramesetter 被释放(显然)并且程序崩溃了!但是...如果我不释放 framesetter,我最终会出现相当大的内存泄漏,程序会退出。

为什么版本会导致崩溃?打开 NSZombieEnabled 后,我收到的错误消息是:

* -[NSConcreteAttributedString release]: message sent to deallocated instance 0xed20270

当然会收到任何帮助!我们目前正面临最后期限,如果我现在可以增加赏金的话我会的! 在 2 天的窗口期满后,任何回答良好的人都将获得赏金。 :-)

最佳答案

您确定要发布 attrString 吗?这看起来不对。我想知道这是否会导致稍后在发布 framesetter 时发生崩溃。

关于ipad - 为什么我不能在应用程序不崩溃的情况下释放我的 CTFramesetter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4268458/

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