Iphone 下载大量图像ipad-内存泄漏?

Iphone 下载大量图像ipad-内存泄漏?,iphone,objective-c,ipad,Iphone,Objective C,Ipad,我有一个应用程序,我正在写,将需要下载大量的图像,可能10000。现在,在内存耗尽和应用程序崩溃之前,我可以达到3000左右,这取决于图像文件的大小。我在后台线程上下载它们,并向用户显示进度 我写了一个助手类,我正在访问它来做这件事,我想知道这是否是我的问题所在,我只是在泄漏内存 这是我下载图像的循环-这是在后台线程上运行的,所有这些都在NSAutoReleasePool中: for (int j=0; j < [items count]; j++) {

我有一个应用程序,我正在写,将需要下载大量的图像,可能10000。现在,在内存耗尽和应用程序崩溃之前,我可以达到3000左右,这取决于图像文件的大小。我在后台线程上下载它们,并向用户显示进度

我写了一个助手类,我正在访问它来做这件事,我想知道这是否是我的问题所在,我只是在泄漏内存

这是我下载图像的循环-这是在后台线程上运行的,所有这些都在NSAutoReleasePool中:

for (int j=0; j < [items count]; j++)
            {

                ImagesHelper *helper = [[ImagesHelper alloc]init];
                [helper downloadImages: [[items objectAtIndex:j] valueForKey:@"ItemSKU"] withManufacturer: [[manufacturers objectAtIndex:i] ManufacturerID]];
                [helper release];

                if (j%50==0) { //this notifies the user of progress
                    statusMessage = [NSString stringWithFormat:@"Downloading images: %@.jpg (%d of %d)", [[items objectAtIndex:j] valueForKey:@"ItemSKU"],j+1, [items count]];
                    [self performSelectorOnMainThread:@selector(setStatus) withObject:nil waitUntilDone:YES];
                }
            }

仍在努力掌握其中一些概念。

您是否尝试过构建和分析?这可能会有帮助。还可以玩乐器。最后,我建议使用NSOperationQueue来处理这些问题。这样你就可以并行地完成它们。此外,在控件返回到主线程之前,您的自动释放池可能不会自动释放任何内容

您是否尝试过构建和分析?这可能会有帮助。还可以玩乐器。最后,我建议使用NSOperationQueue来处理这些问题。这样你就可以并行地完成它们。此外,在控件返回到主线程之前,您的自动释放池可能不会自动释放任何内容

您正在使用的stringWith*、stringBy*、URLwith*、dataWith*等工厂方法中的每一个都返回一个自动释放的对象,其池在循环结束之前不会为空。尝试alloc init,然后在完成后立即发布。您应该会看到更好的结果。

您正在使用的stringWith*、stringBy*、URLwith*、dataWith*等工厂方法中的每一个都会返回一个自动释放的对象,其池在循环结束之前不会为空。尝试alloc init,然后在完成后立即发布。你应该会看到更好的结果。

戴夫说得对。。。使用NSInvocationOperation。我们应该解决这个问题,而不是将代码分割成块。这是我用过的样品

NSOperationQueue *downloadQueue = [NSOperationQueue new];
for (Product *cProduct in productsMasterArray) 
{                   
     NSInvocationOperation *downloadOperation = [[NSInvocationOperation alloc] 
                                                            initWithTarget:self             selector:@selector(downloadImages:) 
                                                        object:cProduct.ITEM_CODE];
                [downloadQueue addOperation:downloadOperation];
                [downloadOperation release];
            }

戴夫说得对。。。使用NSInvocationOperation。我们应该解决这个问题,而不是将代码分割成块。这是我用过的样品

NSOperationQueue *downloadQueue = [NSOperationQueue new];
for (Product *cProduct in productsMasterArray) 
{                   
     NSInvocationOperation *downloadOperation = [[NSInvocationOperation alloc] 
                                                            initWithTarget:self             selector:@selector(downloadImages:) 
                                                        object:cProduct.ITEM_CODE];
                [downloadQueue addOperation:downloadOperation];
                [downloadOperation release];
            }

是的,看起来在我回到主线程之后,一切都被释放了。我必须将这些线程分成小块,并运行一系列后台线程。操作队列+1。它是为这样的东西而建的。是的,看起来在我回到主线程之后,所有的东西都被释放了。我必须将这些线程分成小块,并运行一系列后台线程。操作队列+1。它是为这样的东西建造的。