为什么我不能释放我CTFramesetter没有应用崩溃?
-
28-09-2019 - |
题
我要建一个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时。
不隶属于 StackOverflow