0

私は以下のショーとして(プレゼンターのVCでのプロパティとして)私の新しいのViewControllerを発表するたびに:現在のビューコントローラーでARCを使用する正しい方法は何ですか?

ので、私はいつも(オブジェクトがすでに存在する場合)、オブジェクトの新しいインスタンスを取得することを保証しています
if(self.viewController) [self.viewController release]; 
self.viewController = [[ViewController alloc] init]; 
[self presentModalViewController:self.viewController animated:YES]; 

しかし、今、私はARCを使用し、(ARCでは動作していないので)私のオブジェクトの解放メッセージを送信する方法

を任意のアイデアを持っていないあなたは、この問題で私を助けることができますか?

PS:私がgameVCを提示するたびに、私はオブジェクトの新しいインスタンスが必要です。

ありがとうございます!

+1

のようにも行うことができると思う場合(一般的には)ARCを使ってオブジェクトに解放メッセージを送信する必要はありません。アップルのコンパイラは、適切なときにいつでもコンパイル時にあなたのコードにリリースメッセージを入れます。 –

+2

「あなたはARCを使ってあなたのオブジェクトにリリースメッセージを送ることはできません」と読むべきです。 – mattjgalloway

答えて

2
self.viewController = [[ViewController alloc] init]; 
[self presentModalViewController:self.viewController animated:YES]; 

上記のコードは、常に新しいVCを提示し、Appleのコンパイラは、リリースの世話をします。

しかし、あなたは上記の(神話)といくつかの問題を持っている、あなたはこの

self.viewController = nil; 
self.viewController = [[ViewController alloc] init]; 
[self presentModalViewController:self.viewController animated:YES]; 
+0

私はいくつかの質問を持っています:私の発表者vcはシングルトンです。私はviewController(present)を使い終わった時点で、シングルトンvc(プレゼンター)のメソッドを呼び出し、このメソッドで提示されたvcを却下します。したがって、たとえばvc A present B. Bをしばらく使っています。たとえば、私はB vcを使い終え、Bをもう一度作りたいと思う。 vcでは、メソッド[B dismissModalViewControllerAnimated:YES]を呼び出します。 B vcのallocとpresentを作成しますが、vcは表示されません。 (viewDidLoadは実行されますが、ビューは表示されません)。 –

+0

別の質問とコードを入れてください。アニメーション「NO」を試してください –

+0

とにかく返信いただきありがとうございます! –

0
self.viewController = [[ViewController alloc] init]; 
[self presentModalViewController:self.viewController animated:YES]; 

が正しい方法です。

viewControllerselfのプロパティで、retainまたはstrongフラグの場合、手動参照カウントを使用している場合でもこのコードは問題ありません。プロパティ値を変更しているときは、以前のプロパティ値が解放されるので、自分で解放する必要はありません。

1

コンパイラによって、リリースの指示が出されます。このコードのみを使用すると正常に動作するはずです。

0

ビューコントローラへのポインタを保持しないでください。私はあなたのコードは次のようになりますかなり確信して :

ViewController *viewController = [[ViewController alloc] init]; 
[self presentModalViewController:viewController animated:YES]; 
+0

彼はそれに言及したいのですが?それを参照することは完全に有効です。 – mattjgalloway

+0

このコードが実行されるたびに新しいオブジェクトが必要な場合はそうですが、そうではありません。 –

+0

しかし、彼のメソッド*は*毎回新しいオブジェクトを与えます*と*はそのオブジェクトへの参照を保持します。たとえば、現在提示されているVCと対話したいと思うかもしれません。 – mattjgalloway

関連する問題