这些对象的内存是如何释放的,尚未分配?

时间:2011-04-23 09:31:18

标签: iphone objective-c ios4 memory-management memory-leaks

我初始化了一张图片,例如:

    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 *jpegFilePathNSData *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 *imgNSString *FullImageName中释放内存。

除此之外,如何确保一旦另一个图像加载到imageView之前的图像已从内存中释放出来?

2 个答案:

答案 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