我初始化了一张图片,例如:
NSString *url=[NSString stringWithFormat:@"url/%@",[self.urlOfImagesToDownload objectAtIndex:i]];
UIImage *myImage=[[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString: url]]];
NSLog(@"%d byte of data", [[NSData dataWithContentsOfURL: [NSURL URLWithString: url]] length]);
if (myImage)
{
NSString *jpegFilePath = [NSString stringWithFormat:@"%@/%@.jpg",[self pathForDocumentDirectory],[self.idOfImagesToDownload objectAtIndex:i]];
NSData *data1 = [NSData dataWithData:UIImageJPEGRepresentation(myImage, 1.0f)];//1.0f = 100% quality
[data1 writeToFile:jpegFilePath atomically:YES];
}
现在我如何释放NSString *jpegFilePath
和NSData *data1
如果我有方法:
-(void) changeImageSlide{
totalNoOfImages=[copyOf_myGlobleArrayOfImageIds count];
if (imageCounter>=totalNoOfImages-1) {
imageCounter=0;
}
NSString *str = [NSString stringWithFormat:@"%@.jpg",[copyOf_myGlobleArrayOfImageIds objectAtIndex:imageCounter]];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fullImgNm=[documentsDirectory stringByAppendingPathComponent:[NSString stringWithString:str]];
//=(3*imageCounter+4)%25;
UIImage *img=[UIImage imageWithContentsOfFile:fullImgNm];
[mainSlideShowImageView setImage:img];
[mainSlideShowImageView setTag:[[copyOf_myGlobleArrayOfImageIds objectAtIndex:imageCounter] intValue]];
imageCounter++;
}
它已经通过Timer调用(用于实现幻灯片放映),如何在此UIImage *img
和NSString *FullImageName
中释放内存。
除此之外,如何确保一旦另一个图像加载到imageView
之前的图像已从内存中释放出来?
答案 0 :(得分:1)
这两种方法都不需要为你提到的变量发布内存,因为它们使用提供自动释放实例的类方法。
但是...
您将在方法一中泄漏
UIImage *myImage=[[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString: url]]];
因为你初始化了对象并因此获得了所有权。您需要在方法结束时释放它
答案 1 :(得分:0)
您询问的每个对象都不需要您在自动释放时明确释放它们。您可以告诉它们是自动释放的对象,因为您设置对象的方法不以“alloc”,“new”,“copy”或“mutableCopy”开头。你也没有留下任何一个。
我建议您仔细阅读“内存管理编程指南”。它将帮助您了解在开发iOS时如何管理内存。
http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html