Марсель в основном получил правильный ответ, но я думаю, что нужно немного больше объяснений.Посмотрите на следующие строки из setSongsScrollView:
Song *thesong = [[Song alloc]init];
Приведенная выше строка выделяет новую песню, которой вы владеете, и присваивает ссылку на эту песню
thesong = [self.songs objectAtIndex:i];
Приведенная выше строка заменяет эту ссылкус новой ссылкой на песню из массива, который вам не принадлежит.Помните, что: вам не принадлежит песня, на которую ссылается thesong сейчас.Теперь больше нет ссылок на объект, который вы только что разместили, но вы все еще являетесь его владельцем.Поэтому объект просочился.
NSString *filename = [NSString stringWithFormat:@"%@/%@", [LazyImageView dataPath], [thesong.cover lastPathComponent]];
Используйте stringByAppendingPathComponent:
для построения путей к файлам, а не stringWithFormat:
.
UIImageView *tempImg = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:filename]];
tempImg.tag = i;
tempImg.frame = imgFrame;
[songsContainer addSubview:tempImg];
[tempImg release];
[thesong release];
Последняя строка в приведенной выше последовательности освобождает объект, на который ссылаетсяпесня.Как отмечалось выше, вы не являетесь владельцем этого объекта.Вы не должны выпускать это, но у вас все равно есть.Это означает, что в какой-то момент может быть сейчас, а может и позже, объект будет освобожден, в то время как что-то (возможно, массив) все еще думает, что оно имеет действительную ссылку.Вот что вызывает сбой.
-(void)load_images{
for(int i=0;i<[songs count];i++){
Song *rsong = [[Song alloc]init];
rsong = [self.songs objectAtIndex:i];
lazyBigImg = [[LazyImageView alloc] init];
NSURL* url = [NSURL URLWithString:rsong.cover];
[lazyBigImg loadImageFromURL:url];
[lazyBigImg release];
[rsong release];
}
}
Вышеуказанный метод содержит точно такую же ошибку.