2012-02-27 57 views
0

比方說,我一個子視圖添加到我的觀點,這樣的:更改導航控制器時,我的子視圖會發生什麼變化?

[[self addSubview:myView]; 

然後我推新視圖到navigationController堆棧,像這樣:

[self.navigationController pushViewController:otherView animated:YES]; 

發生了子視圖那是什麼我添加到原始視圖。它是否被自動刪除?

而且,如果我的程序調用該行:不刪除的觀點並認爲做什麼壞事一樣創建一個內存泄漏

[[self addSubview:myView]; 

多次?

回答

3

首先,要小心你說的話。您不添加子視圖viewcontrollers,添加子視圖的觀點,即(self是一個視圖控制器)

[self.view addSubView:myView]; 

而且,你不推的觀點,但viewcontrollers,即

[self.navigationController pushViewController:otherViewController animated:YES]; 

現在有了上面的第一條語句,該視圖有一個新的子視圖。如果您通過navigationcontroller(第二條語句)在原始視圖上推送新視圖,這並不會真正影響原始視圖。因此,彈出新視圖(控制器)後,您添加的子視圖仍然存在。

看到它那樣:你的第一個視圖控制器有一個叫做View1的視圖。你向View1添加了一個子視圖,很好。現在使用UINavigationController進行推送,在您的舊視圖控制器上推動新視圖控制器,所以您現在可以看到其視圖View2。這與View1無關。

要回答你的第二個問題,看Add same subview multiple times to view

簡短的回答,認爲將從中刪除,並立即插入父視圖。所以,毫無意義的是,沒有什麼不好的事情會發生(子視圖會被推到前面)。

+1

彈出後子視圖可能不在那裏。如果您的應用程序收到內存警告,隱藏的視圖控制器將清除其視圖以釋放內存。當再次調用viewDidLoad時,您應該準備重新創建並重新添加子視圖。 – jsd 2012-02-28 01:34:12

0

那麼,你總是可以使用XCode附帶的測試工具來檢查內存泄漏,但是我相信當你調用pushViewController時,它會讓其他視圖保持完好。另外,如果您使用的是UINavigationController,它會自動放置一個很好的後退按鈕,讓您返回到前一個視圖。

0

如果您致電[self.view addSubview: myView];,然後致電[self.navigationController pushViewController: otherViewController animated:YES];,myView不會自動從self.view中刪除。多次調用[self.view addSubview: myView];而不刪除myView,似乎毫無意義,但是您不會創建內存泄漏。

相關問題