2011-02-08 57 views
3

我一直在關注iTunes U上的iPhone開發視頻,並且這麼好。我認爲我足夠了解事情。返回自動釋放對象的類方法

問題是,他們提供的例子中,他們從來沒有創建自定義的類方法,就像你在某些基礎類(如[NSString string])上使用的那樣,所以我不確定應該如何去創建我自己的類方法返回我的類的autoreleased實例。

我知道如何使用實例方法創建保留對象,但我寧願使用類方法,因爲我更喜歡它,我只是不確定此實現是否最適合返回自動釋放對象:

+ (PhotoViewController*)initWithImageView:(UIImageView*)imageView 
{ 
    PhotoViewController *toreturn = [[PhotoViewController alloc] init]; 
    toreturn.imageview = imageView; 
    [toreturn autorelease]; 
    return toreturn; 
} 

非常感謝您提供的任何幫助。

回答

6

一個類方法可以根據需要返回一個保留或自動釋放的對象,並且您的代碼完全適當地返回一個自動釋放的對象。

但是,您應該以不同方式命名您的方法。由於你的方法從init開始,這意味着它正在初始化一個alloc ed對象(因此應該是一個實例方法而不是類方法)。如果它要返回一個自動釋放對象,我會建議命名方法photoViewControllerWithImageView:

此外,我可能會寫它爲return [toreturn autorelease];,但我想這是我的一種風格偏好。

+0

我想他是問他是否使用保留髮布權,並且您似乎回答除此之外的每個問題:) – 2011-02-08 15:49:58

+2

類方法不應該以init爲前綴,但Apple指南只包含開始的方法名稱用`alloc`或`new`或包含單詞'copy`。 – jlehr 2011-02-08 16:05:30

2

我認爲在訪問imageview屬性之前檢查toreturn是否爲nil是個好習慣。