潜在泄漏的问题

时间:2011-07-07 09:43:20

标签: iphone xcode memory-leaks

这段代码有点问题:

 UITableViewCell *cell = (UITableViewCell *)[[button superview] superview];
 [button setBackgroundImage: [UIImage imageNamed:@"blueButton.png"] forState:UIControlStateNormal];

 VersionsPopover* content = [[[VersionsPopover alloc] initwithChapter:button.chapter]autorelease];
 UIPopoverController* aPopover = [[UIPopoverController alloc] initWithContentViewController:content];
 aPopover.delegate = self;
 aPopover.popoverContentSize = CGSizeMake(500,[self filesFromFolderWithChapter:button.chapter] *  60);

这个

VersionsPopover* content = [[[VersionsPopover alloc] initwithChapter:button.chapter]autorelease];

总是让我有潜在的泄漏 使用autorelease我得到aPopover“对象发送自动释放次数太多了” 当我使用[content release]时Xcode告诉我我没有这个对象 没有发布它说“潜在的泄漏”。

不知道我还能尝试解决这个问题......

3 个答案:

答案 0 :(得分:1)

这样做。

VersionsPopover* content = [[[VersionsPopover alloc] initwithChapter:button.chapter] retain];
UIPopoverController* aPopover = [[UIPopoverController alloc]
                                 initWithContentViewController:content];
aPopover.delegate = self;
aPopover.popoverContentSize = CGSizeMake(500,[self filesFromFolderWithChapter:button.chapter] *  60);
[content release];

答案 1 :(得分:0)

您可以尝试初始化content对象而不发送最终的autorelease消息。 然后用它做你想做的事情,最后当你不再需要它时发送release消息。 根本不应该有任何泄漏。

答案 2 :(得分:0)

您展示的代码不应泄漏或过度发布(除了泄漏aPopover,但我猜您正在处理未在此处显示的代码中。)

您可能会在VersionsPopover的{​​{1}},init...viewWill...方法中过度释放对象。