我的代码花了很多时间从图库中加载图像。我将每个图像的网址存储在数据库中,然后使用AssetsLibrary框架从图库中加载它们。但是我注意到它占用了更多的内存,所以我收到了内存警告。过了一段时间,应用程序崩溃了。我把我的代码放在这里。
-(void) nextImageLoad
{
// ALAssetsLibrary* self. assetslibrary=[[ALAssetsLibrary alloc] init];
self.myScrollView.pagingEnabled=YES;
NSLog(@"current :- %d, loaded_photo :- %d, [imageData count] :- %d",current, loaded_photo, [imageData count]);
if(current>loaded_photo && current < [imageData count])
{
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
{
self.rep = [myasset defaultRepresentation];
CGImageRef iref = [self.rep fullResolutionImage];
if (iref)
{
UIImageView *temp = [[UIImageView alloc] initWithFrame:CGRectMake(self.x, y, 300, 300)];
temp.image=[UIImage imageWithCGImage:iref];
[self.myScrollView addSubview:temp];
[temp release];
[myScrollView setContentSize:CGSizeMake(self.x+600, 410)];
[myScrollView setAutoresizesSubviews:YES];
}
else
{
}
};
ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror)
{
NSLog(@"booya, cant get image - %@",[myerror localizedDescription]);
};
[self.assetslibrary assetForURL:[NSURL URLWithString:[[self.imageData objectAtIndex:current] valueForKey:@"photo_url"] ]
resultBlock:resultblock
failureBlock:failureblock];
self.x=self.x+320;
loaded_photo= loaded_photo+1;
}
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
lastContentOffset = scrollView.contentOffset.x;
}
-(void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
if (lastContentOffset > scrollView.contentOffset.x)
{
NSLog(@"left");
if(current>0)
current=current-1;
}
else if (lastContentOffset < scrollView.contentOffset.x)
{
NSLog(@"right");
current=current+1;
[self nextImageLoad];
}
lastContentOffset = scrollView.contentOffset.x;
}发布于 2011-11-07 19:47:36
很难知道这是否是问题所在,但请尝试在所有块中创建一个自动释放池:
block = ^(ALAsset *myasset)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// rest of block here
[pool release];
}还请记住,如果您在块内提前返回,则需要在return语句之前释放pool对象。
https://stackoverflow.com/questions/8005555
复制相似问题