我要建一个iPad应用程序这使得从NSAttributedString文本页面。我创建这样的framesetter:

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

...那么代码增加了新的网页浏览,一个接一个,并传递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释放]:消息发送到释放的实例0xed20270

给予任何帮助,当然是极大的好评!目前,我们正在对抗的最后期限在这里,如果我现在可以添加一个赏金我会的! 任何人只要有一个很好的答案将给予奖励赏金2天的窗口过后: - 。)

有帮助吗?

解决方案

您确定您应该被释放attrString?这并不右看看。我不知道这后来导致崩溃释放framesetter时。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top