2011-09-13 478 views
1

我添加一個XIB作爲子視圖只是爲了臨時使用。它是全屏,我認爲我的代碼效率低下。我知道我在這裏做錯了事。我的子視圖在控制檯中出現奇怪的崩潰和警告消息。我知道子視圖中的代碼沒有問題,因爲我已經以不同的方式測試了它。有沒有更有效的方法來做到這一點?

我在這裏做錯了什麼?

self.sp = [[Score alloc] initWithNibName:@"Score" bundle:nil]; 
    [self.view addSubview:self.sp.view]; 
    [self.sp.view setFrame:CGRectMake(0, 485, 320, 480)]; 
    [self.sp.view setBackgroundColor:[UIColor clearColor]]; 
    [UIView animateWithDuration:1 
          delay:0 
         options:UIViewAnimationOptionCurveLinear 
        animations:^{ 
         [self.sp.view setCenter:self.view.center]; 
        } 
        completion:nil]; 

我認爲這與我的情況下釋放'sp'有關。我將如何正確釋放它?我在其觀點控制者而不是這個觀點中否定了這種觀點。

謝謝!

回答

1

你肯定是在泄漏Score對象。

當您使用allocinit時,它將返回一個保留計數爲1的對象,該對象永遠不會爲release ing。更重要的是,如果您的sp資產屬於retain資產,您會進一步將保留計數增加1,並且您需要再次調用release調用。

假設spretain屬性,嘗試以下操作:

self.sp = [[[Score alloc] initWithNibName:@"Score" bundle:nil] autorelease]; 

,並確保您dealloc方法也release荷蘭國際集團sp

+0

感謝您的信息和答案。還有最後一件事,當我從屏幕Score的視圖控制器中消除視圖時?它是自動釋放還是我必須做一些特殊的事情? –

+0

在這種情況下,您必須手動釋放它,因爲您正在手動顯示它。 – pgb

+0

你是什麼意思手動釋放它?我在Score視圖中做的所有事情是[self.view removeFromSuperView];但我知道我實際上沒有釋放它,所以在這種情況下我應該怎麼做? –

相關問題