2012-02-07 105 views
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。只要合適,Apple的編譯器會在您的代碼中放入發佈消息。 – 2012-02-07 15:05:14

+2

這應該是:「你*不能*用ARC發送釋放消息給你的對象。」 – mattjgalloway 2012-02-07 15:11:48

回答

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

上面的代碼將始終呈現出新的VC和蘋果的編譯器將釋放的照顧。

但如果你覺得上面有一些問題(這是一個神話),那麼你也可以做這樣的

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

我有一些問題:我的演示者vc是單身人士,當我完成使用我的viewController(呈現)我調用單身vc(演示者)的方法,並且想要在此方法中關閉呈現的vc。所以,例如vc A目前B.使用B一段時間。例如,我完成了使用B vc並希望再次重新創建B.在一個vc我調用方法[B dismissModalViewControllerAnimated:YES];並且爲B vc做alloc和present,但是我沒有看到vc。 (viewDidLoad是執行,但查看不顯示)。 – 2012-02-07 15:28:54

+0

請把另一個問題以及代碼..嘗試動畫'NO' – 2012-02-07 17:04:41

+0

好的。無論如何感謝您的回覆! – 2012-02-07 17:32:01

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

是正確的方法。

然而,即使你使用手動引用計數,假設viewControllerselfretainstrong標誌屬性這段代碼就可以了。當你改變屬性值時,以前的屬性值被釋放,所以你不需要自己釋放它。

1

編譯器爲你放​​置release指令。您應該只使用此代碼,它應該工作正常:

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

您不應該持有指向您的視圖控制器的指針。 我敢肯定,你的代碼應該是這樣的:

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

如果他想要參考它會怎麼樣?保持對它的引用是完全有效的。 – mattjgalloway 2012-02-07 15:12:51

+0

是的,但不是每次執行此代碼時都需要一個新對象。 – 2012-02-07 15:15:55

+0

但是他的方法*每次*都會給出一個新的對象*並*保留對它的引用。例如,他可能想要與當前呈現的VC進行交互。 – mattjgalloway 2012-02-07 15:45:06

相關問題