2011-10-28 6 views
2

のObjective-Cのオブジェクトを初期化する方法、すなわち:異なるObjective-Cでオブジェクトを初期化する2つの方法があります

1)AVCaptureSession *captureSession = [[AVCaptureSession alloc] init];

2)彼らがやっているようAVCaptureSession *session = [AVCaptureSession new];

らしいです同じ仕事。それらの違いは何ですか?それともiOS5の新機能ですか?

答えのために感謝される、

アルテム

答えて

3

new任意のオブジェクトで動作するはずのalloc/initのを行うためのショートカットの方法ですが、それは主にSmalltalkとnew呼び出しから二日酔いだ取ることはありませんあなたはそれがもっとはるかに使われているのを見ていない。

ので、2つは同じである必要があり、それは目新しさだがないのiOSの5

EDIT:これにさらに、newalloc、その後initを呼び出し、利用されたものとして与えられているものとしてNSObject上で定義されていますMac OS X 10.0以降(これはAppleの文書に関する限りの始まりである)。

+1

多くのオブジェクトには、-init以外の初期化子が指定されているので、-newを呼び出すことは適切ではありません。最も重要な例は、コード内にNSViewサブクラス(すべてのCocoaコントロールを含む)を作成することです。指定された初期化子は-initWithFrame:であり、矩形を引数として取ります。 -initを使用してビューを初期化すると、予測できない(通常は望ましくない)結果が得られますので、alloc/initWithFrame:のペアが必要です。レッスン:どこでも新しい-newを使用しないでください。 :-) –

関連する問題