2012-10-12 106 views
0

我有兩個ARC和沒有ARC項目的情況。使用ARC推視圖控制器?

1)沒有ARC.we的項目可以使用以下內容。

MyViewController* viewController = [[MyViewController alloc] init]; 
[self.navigationController pushViewController:viewController animated:YES]; 
[viewController release]; 

2)如何在ARC項目中實現上述目標。

 a)where can I allocate memory? 
     b)where can I release viewcontroller after pushing? 
     c)is there any standard for it? 
+0

你有什麼嘗試過,併產生錯誤?其實,很顯然你還沒有嘗試過。如果您使用的是ARC,則代碼甚至無法編譯,因爲您在使用ARC時無法發佈。 – sosborn

+0

ya。我想知道正確的代碼.. –

回答

0

當使用ARC你不需要釋放的viewController,編譯器將添加releaseretain爲你..

所以在ARC這會做:

MyViewController* viewController = [[MyViewController alloc] init]; 
[self.navigationController pushViewController:viewController animated:YES]; 

使用retainreleaseautorelease將導致編譯器錯誤。


請注意,使用ARC時您需要正確使用@property。對於您想保留的屬性使用strong,對於您只想要assign的屬性,請使用weak。如果你想要iOS 4.3的支持,你不能使用weak,但應該使用unsafe_unretained

+0

哪個變量,我可以在你的示例代碼中設置強屬性。你已經爲本地MyViewController分配了內存。當它不需要的時候,ARC會自動釋放它。 –

+0

你不需要它在你的代碼中使用ARC時需要考慮的東西。 – rckoenes

0

在ARC你沒有用戶releaseautoreleaseretain。 ARC爲你做到這一點。您只需像往常一樣分配[[Class alloc] init];,但不需要將上述消息發送給您的對象。

0
MyViewController* viewController = [[MyViewController alloc] init]; 
[self.navigationController pushViewController:viewController animated:YES]; 

那它只能如果您使用ARC,沒有必要釋放視圖控制器推後,作爲ARC需要照顧的所有版本。它本身插入只有編譯時所有的版本,所以它會正常工作。

+0

我有這個問題。當我做到這一點,並與分析器內存檢查增加非常快。看到ARC不立即釋放對象。你對此有任何想法。 – Subrat

0

啓用了ARC視圖控制器的推壓是非常簡單的:

MyViewController* viewController = [[MyViewController alloc] init]; 
[self.navigationController pushViewController:viewController animated:YES]; 

這是因爲ARC自動計算活性指針指向分配的對象,並且當沒有活動的指向對象,該對象會自動爲您釋放。所以你不必自己調用這些方法。