【发布时间】:2014-07-05 13:39:50
【问题描述】:
首先:我已经在谷歌和 SO 上搜索了解决方案 - 没有一个有效。 我有一个应用程序可以加载当前 iTunes 曲目的插图并显示它;这存储在一个 NSImage 实例中,以及其他一些变量中,在一个类中:
@interface infoBundle : NSObject
@property (strong) NSImage *track_artwork;
@property (weak) NSString *track_title;
@property (weak) NSString *track_album;
@property (weak) NSString *track_artist;
@end
然后,创建这个类的一个实例:
-(infoBundle*)returnInfoBundle {
infoBundle* tmpBundle = [[infoBundle alloc]init];
tmpBundle.track_artwork = [[NSImage alloc]initWithData:[(iTunesArtwork *)[[[iTunes currentTrack] artworks] objectAtIndex:0] rawData]];
[...]
return tmpBundle;
}
后来又用了:
-(void)iTunesDidChange {
infoBundle* tmpBundle = [self returnInfoBundle];
[...]
[imageView setImage:tmpBundle.track_artwork];
}
每次调用 iTunesDidChange 会消耗大约 2MB(我猜是封面大小)。
我已经试过了:
- [tmpBundle 自动释放];
- [tmpBundle 发布];
- [tmpBundle dealloc];
- tmpBundle = nil;
并且,在那之后没有帮助: - 启用 ARC。
=> 尽管对象 (tmpbundle) 应该被删除,但为什么这会占用内存? => 如何实现无泄漏的 NSImage 使用?
感谢任何提示/建议/解决方案:)
【问题讨论】:
-
下次提示:尝试使用 Instruments 来调试此类性能问题,这对您的应用程序的其他方面更有帮助并且速度更快。
-
tempBundle.track_artwork看起来像是错字? -
@duci9y 做到了。但是,我发现 Instruments 提供的信息不是很有帮助。确实很详细,但没有帮助。
-
@mikeD 那个错字在哪里? :)
-
它总是有用的。也许我们可以帮助您解释结果。
标签: objective-c cocoa memory-leaks