我正在製作一個應用程序,就像電影播放器,但不是顯示視頻,而是在圖像幀中放映電影。滑塊用於向前和向後移動「電影」,如果釋放,則「電影」會自動播放到一個章節。 我通過在滑塊的每個值更改上使用UIImageView
並更改image
屬性來實現此目的。一段時間後,由於內存警告,應用程序崩潰。我不能使用UIImage的動畫,因爲我想通過清理滑塊來控制位置(即可見圖像/幀)。 因此,我有一個ImageManager類,它在init中加載數組中字符串中的所有圖像名稱(每個圖像總共大約150kb)。UIImageView由於內存警告而崩潰,試圖加載大量圖像
- (id) initWithCanvas:(UIImageView*) canvasView{
self = [super init];
if (self) {
totalImages = 1500;
self.canvas = canvasView;
self.images = [[NSMutableArray alloc] init];
for (int i=0; i<totalImages; i++){
[self.images addObject:[NSString stringWithFormat:@"frame_%04d.jpg", i]];
i = i + 4; // I use this to skip 4 frames
}
previewsImageIndex = -1;
[self setImageAtPosition:0];
}
return self;
}
然後我有一個在其上找到當前圖像名稱和構建從圖像名稱一個UIImage,並把它設置爲UIImageView的
- (void) setImageAtPosition:(CGFloat)percentage{
currentImage = nil;
int position = percentage * [self.images count];
if (position != previewsImageIndex){
previewsImageIndex = position;
NSLog(@"Got image:%d at percentage: %f", position, percentage);
if (position < [self.images count]){
self.canvas.image = nil;
currentImage = [UIImage imageNamed:[self.images objectAtIndex:position]];
[self.canvas setImage:currentImage];
currentImage = nil;
//[currentImage release];
}
}
}
即使UISlider的值變化發射功能我將currentImage和canvas.image設置爲零,應用程序崩潰後不久。我不明白我在哪裏有內存泄漏。另外,我使用ARC編碼,因此沒有發佈。
有沒有其他更好的方式來做到這一點,除了有一個UIImage視圖?我想要逐幀查看功能,並且MPMoviePlayer或AVPlayer不能進行細粒度的清理。
不要使用'imageNamed',因爲它會緩存你的圖片。 –
請顯示'currentImage'的聲明。 –
@MarcusAdams UIImage * currentImage;但它是''imageNamed'做了壞的東西 –