2011-06-27 38 views
3

假設我的應用程序有6個窗口,1個窗口是主窗口,其他5個用於設置,分數,統計等。何時使用多個筆尖?

所以,如果我是正確的,因爲記憶管理使用多個筆尖? 因此,如果我將所有6個視圖放在一個nib文件中,那麼在加載應用程序時它將同時加載所有6個視圖並佔用大量內存,但是如果我爲6個視圖使用6個視圖,啓動時應用程序將只會首先加載查看,當我點擊「選項」時,它將加載Options.nib並顯示視圖。

是否有更多的理由在一個筆尖使用多個筆尖而不是多個視圖?

我對不對? 如何知道何時使用addSubview或presentModalViewController? 當我使用這兩種方法切換視圖時,主要區別是什麼?

回答

1
  1. 你是對的記憶。所有的筆尖視圖都會同時加載到內存中。你可能不需要他們一次。所以在這種情況下,你正在浪費記憶。如果您有很多視圖,這甚至會導致應用程序崩潰。

  2. 添加單獨的筆尖通常會產生更多結構化的代碼。設置和分數之間沒有邏輯關係。所以你應該爲他們分開班級和筆尖。如果你不這樣做,你可能會有一個難以管理的代碼,這將需要更多的時間來維護和修改。

1

筆尖(或XIB)文件幾乎與內存管理無關。他們出於方便的目的。使用可視化工具佈置用戶界面並連接操作比手動編碼所有自動調整掩碼和操作更容易。然而,你是對的,你不想一次加載所有的視圖到內存中,因爲這將是一個浪費

使用多個XIB文件對保持項目結構更有用。 (在某些情況下,您甚至可以爲單個視圖控制器使用替代筆尖,儘管常見情況是1:1的比例。)

addSubviewpresentModalViewController方法真的不同。 addSubview需要一個視圖並將其添加到給定視圖(或將其帶到最前面)。這意味着你將負責保留視圖控制器,以避免奇怪的事情發生。這將用於在主視圖中呈現其他視圖,例如在橫幅或類似內容中顯示消息。

相比之下,presentModalViewController用於呈現短時間的單個視圖,例如登錄表單或信息屏幕。您將整個視圖控制器零碎地傳遞,並且通常會在此後立即釋放視圖控制器。事實上,經常可以看到這樣的代碼:

SomeViewControllerSubclass *myVC = [[SomeViewControllerSubclass alloc] initWithNibName:@"SomeViewControllerSubclass" bundle:nil]; 
[self presentViewController:myVC]; 
[myVC]; 

呈現通知後立即如何釋放SomeViewControllerSubclass實例。你不能用addSubview這樣做,因爲那時你可能會留下一個沒有控制器的視圖。你必須自己保留它。

+0

Thx男人,我還有一個問題。 – vburojevic

+0

Whz在某些教程中使用:initWithNibName:nill 改爲initWithNibName:@「SomeViewControllerSubclass」 – vburojevic

+0

在這些情況下,它們可能是在代碼中手動配置視圖。 – Moshe