消息发送到已发布的对象(从未手动释放)

时间:2011-06-30 17:34:10

标签: iphone objective-c mpmediaitem nszombieenabled

删除了发布声明。其中一些似乎没问题,但这可能只是因为其他事情首先爆发了。


- (void)handleNowPlayingItemChanged:(id)notification {
    MPMediaItem *item = self.musicPlayer.nowPlayingItem;
    NSString *title = [item valueForProperty:MPMediaItemPropertyTitle];

    NSNumber *duration = [item
                         valueForProperty:MPMediaItemPropertyPlaybackDuration];
    float totalTime = [duration floatValue];
    progressSlider.maximumValue = totalTime;

    CGSize artworkImageViewSize = self.albumCover.bounds.size;
    MPMediaItemArtwork *artwork = [item valueForProperty:
                                                   MPMediaItemPropertyArtwork];
    if (artwork) {
        self.albumCover.image = [artwork imageWithSize:artworkImageViewSize];
    } else {
        self.albumCover.image = nil;
    }

    titleLabel.text = title;

    /*OpenEars stuff*/
}

another question中,我提到了有关艺术作品的SQLite错误。

**删除了有关NSZombieEnabled调用已发布对象警报的错误和详细信息。 **


唔,我不觉得愚蠢。这是所有内存管理 我努力不泄漏任何东西,即使是在临时解决方案中,但我这样做了......

3 个答案:

答案 0 :(得分:2)

在您提供的代码中,我没有看到任何对retain,alloc / init或某些副本的调用的调用。这意味着您不应该在该方法中发布任何调用,这将导致崩溃。确保您没有在其他方法中过度发布并记住basics of memory management

答案 1 :(得分:0)

你正在发行标题和艺术品,但它们不是你的。这将很快或稍后导致暂时释放已经解除分配的对象(来自项目的dealloc或其他地方)。

答案 2 :(得分:0)

// [艺术品发布];

// [title release];

评论那些因为那些是自动释放的对象