• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-13 06:07:31 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

- (void)renderTextFromAttributedStringNSAttributedString *)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 被释放(显然)并且程序崩溃了!但是...如果我不释放框架 setter ,我最终会出现相当大的内存泄漏并且程序会退出。

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

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

任何提供的帮助当然都会受到极大的欢迎!我们目前正面临截止日期,如果我现在可以添加赏金,我会的! 在 2 天的窗口期过后,任何回答好的人都将获得赏金奖励。 :-)



Best Answer-推荐答案


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

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap