2012-08-08 38 views
1

我已經在我的代碼UIImagePNGRepresentation內存泄漏

NSData *dataForImage=UIImagePNGRepresentation(image); 

我的應用程序崩潰是由於低memory.When我用VM跟蹤器/分配它顯示我的堆增長使用下面一行。我分析了代碼。它顯示我在上面的線路泄漏爲100%。 UIImagePNGRepresentation方法是否需要更多的內存分配?據我所知,它返回一個自動釋放對象。

請讓我知道如果我做錯了什麼。編號: 泄漏儀器沒有泄漏。我使用分配工具,然後爲特定功能拍攝堆積。它顯示了我的堆增長。我想這是更多的使用app.In heapshot我用「擴展詳細信息」後,負責應用程序崩潰,它表明我100%以上線

編輯:希望這有助於

-(IBAction)Save{ 

       MyInfo *myInfo = [[MyInfo alloc]init]; 
       if (theimageView.image != nil) { 

        UIImage *image=[theimageView.image fixImageOrientation]; 
        [myInfo set_image:image]; 
        NSData *dataForImage=UIImagePNGRepresentation(image); 
        image=nil; 

        [myInfo set_imageData:dataForImage]; 
        dataForImage=nil; 
       } 
    [tempArray addObject:myInfo]; 
    [myInfo release]; 
    myInfo=nil; 
    // Here I have added myInfo object in array and released that object 


} 

在上面代碼,fixImageOrientation是爲UIImage編寫的類別。

+1

難道真的出你泄露該行(使用儀器泄漏),或者是它只是顯示你分配(在分配儀)?無論哪種方式,您都需要向我們展示所有使用'dataForImage'的代碼。 – 2012-08-08 06:50:14

+0

泄漏儀器沒有泄漏。我使用分配工具,然後爲特定功能拍攝堆積。它顯示了我的堆增長。我認爲這是應用程序崩潰後負責更多的使用app.In.In heapshot我使用「擴展細節」,它顯示我上面的線100%% – user605003 2012-08-08 06:52:45

+0

你仍然需要編輯你的問題,包括所有的代碼,使用'dataForImage' 。 – 2012-08-08 06:53:17

回答

2

我的猜測是它導致問題的UIImagePNGRepresentation(image)方法。你需要排出池。

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

NSData *dataForImage=UIImagePNGRepresentation(image); 

[pool release]; 

或ARC

@autoreleasepool 
{ 
    NSData *dataForImage=UIImagePNGRepresentation(image); 
}