2009-12-15 18 views
1

我必須嘗試了十幾個這個代碼的化身。並看了+100個答案。它應該非常簡單。一個真正的基本動畫(這次使用IB),但始終顯示內存泄漏。無論我在哪裏放我的零,我的釋放,嘗試了數以億計的組合。讓我瘋狂! animationImages總是顯示內存泄漏

//實現viewDidLoad在加載視圖後執行額外的設置,通常來自一個筆尖。

- (void)viewDidLoad { 
    NSLog(@">>> Entering %s <<<", __PRETTY_FUNCTION__); 

    myView.animationImages = [NSArray arrayWithObjects: [UIImage imageNamed:@"1.png"], 
                 [UIImage imageNamed:@"2.png"], 
                 [UIImage imageNamed:@"3.png"], 
                 [UIImage imageNamed:@"4.png"],nil]; 

    myView.animationDuration = 1.0; 

    myView.animationRepeatCount = 0; 

    [myView startAnimating]; 

    [myView release]; 
    myView = nil; 

    [myView.animationImages release]; 


    NSLog(@">>> Leaving %s <<<", __PRETTY_FUNCTION__); 
} 
+0

'MyView的=零; [myView.animationImages發佈]'''''''''''''''''''''''我假設這是因爲您在發佈之前嘗試了很多。否則,排序顯然是錯誤的。 – Dirk 2009-12-15 21:20:29

回答

-1

您是否試過在[myView release];之前放[myView.animationImages release];?一旦你釋放myView,你不能再訪問myView.animationImages,因爲沒有任何引用它。

+0

是的,試過了。還是一樣的內存泄漏。這是一個絕望的嘗試!但在[myView.animationImages發佈]之前,[myView版本]沒有給我一個錯誤,這有點奇怪。 – 2009-12-15 22:01:05

1

這裏有各種各樣的問題。您不擁有您要在此發佈的任何參考文獻。你看到的實際泄漏是什麼?模擬器還是設備?

首先清理這段代碼,擺脫你的版本和你的設置爲零。

+0

好吧,我的班級創建了變量,添加了圖片等。誰擁有它?我如何找出誰擁有它?我的班級將IB中的所有內容聯繫起來現在我有點困惑。這裏只有一節課。錯誤在模擬器和設備中。並刪除發佈和nils。同樣的錯誤。 – 2009-12-16 21:27:06

0

你的問題是沒有給你的圖像數組和myView發生什麼事情的整個圖片足夠的細節。如果沒有能夠看到完整圖片中發生了什麼,我會建議您嘗試Build - > Clean All Targets,然後Build - > Xcode中的Build and Analyze。這種構建和分析只是雪豹版Xcode的一個選項。它將分析潛在內存泄漏的代碼,並可能有助於指引您朝着正確的方向發展。它不會在所有事情上都有所表現,但它確實有助於指出我在急於時會傾向於錯過的一些事情。

否則,我建議你發佈myView正在分配的位置以及animationImages的屬性聲明。

0

我不太確定我是對還是錯。但我不認爲我的View.animationImages需要被釋放,因爲它不是init之前,除非它是你的程序的其他部分的初始化,我認爲這是非常不可能的。

有人誰在內存管理更多的知識,請驗證。謝謝!

-1

添加

myView.animationImages = nil; 

之前:

myView.animationImages = [NSArray arrayWithObjects: [UIImage imageNamed:@"1.png"], 
                [UIImage imageNamed:@"2.png"], 
                [UIImage imageNamed:@"3.png"], 
                [UIImage imageNamed:@"4.png"],nil]; 

因此,最終的代碼是這樣的:

myView.animationImages = nil; 

myView.animationImages = [NSArray arrayWithObjects: [UIImage imageNamed:@"1.png"], 
                [UIImage imageNamed:@"2.png"], 
                [UIImage imageNamed:@"3.png"], 
                [UIImage imageNamed:@"4.png"],nil]; 

myView.animationDuration = 1.0; 

myView.animationRepeatCount = 0; 

[myView startAnimating]; 

[myView release]; 
myView = nil;