2011-02-08 12 views
3

私はiTunes UのiPhone開発ビデオに従っています。私は物事を十分に理解していると思う。オートレリースされたオブジェクトを返すクラスメソッド

私は、提供するサンプルでは、​​([NSString string]のような)いくつかのFoundationクラスで使うようなカスタムクラスメソッドを決して作成しないので、作成方法についてはわかりません自分のクラスのオートレリースされたインスタンスを返す自分のクラスメソッド。

私はインスタンスメソッドを使用して保持オブジェクトを作成する方法を知っていますが、好きだからむしろクラスメソッドを使用したいと思います。この実装が自動解放されたオブジェクトを返すのに最も適しているかどうかはわかりません:

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

ご協力いただきありがとうございます。

答えて

6

クラスメソッドは、保持されたオブジェクトまたはオートレリースされたオブジェクトのいずれかを返すことができ、コードはオートレリースされたオブジェクトを完全に適切に返します。

おそらく、あなたの方法に別の名前を付けるべきです。あなたのメソッドはinitで始まるので、それはalloc edオブジェクトを初期化することを意味します(したがって、クラスメソッドではなくインスタンスメソッドでなければなりません)。 autoreleasedオブジェクトを返す場合は、photoViewControllerWithImageView:メソッドの名前を付けることをお勧めします。

また、私はおそらくreturn [toreturn autorelease];と書いていますが、それは私のスタイルの好みだと思います。

+0

彼は保留権を使用しているかどうかを尋ねていると思いますが、これ以外のすべての質問に答えているようです:) –

+2

クラスメソッドには 'init'という接頭辞を付けるべきではありませんが、Appleのガイドラインは、 'alloc'または' new'を使って、あるいは 'copy'という単語を含んでいます。 – jlehr

+0

あなたは大丈夫です、ありがとう!私はそれに応じて私の答えを修正します。 – paulbailey

2

imageviewプロパティにアクセスする前に、toreturnnilであるかどうかを確認することをお勧めします。

+1

この場合、なぜ違いはありますか? – jlehr

+0

いいえ、そうではありません。しかし、私の経験によれば、戻り値が何であるかをコードで明確にする方が良いと言われています。特に、コードはかなり後に、おそらく他の人によって維持されます。しかし他は同意しないかもしれない。申し訳ありませんが、私はその答えを明らかにしていませんでした。 – MHC

+0

あなたがここで何を得ているのかまだ明確ではありません。 'init'の呼び出しが失敗した場合、メソッドは' nil'を返します。あなたはどうしたら違うのですか? – jlehr

関連する問題