2010-06-10 38 views
0

對於內存管理問題,Apple建議在屬性中定義出口,而不是在屬性聲明中定義出口。但據我所知,聲明屬性會將類暴露給外部類,所以這可能是危險的。關於類的屬性和展示的IBOutlet

在UIViewController上我們有主視圖的定義和邏輯,所以在這種情況下MVC略微有作弊

什麼是beter方法,蘋果的內存管理建議或裝甲類?

回答

0

MVC不被UIViewController欺騙,因爲該類實現了一個Controller。它定義了View對象(通常存儲在XIB中)和Model對象(有時是Core Data實體,有時是其他的東西)之間的連接。

無論如何。將插座定義爲屬性的一點是,您可以明確聲明屬性的內存管理要求在類接口中。 NIB加載機制使用訪問器(如果它們存在),所以如果您定義了一個retain屬性,則會保留該出口。如果它找不到訪問器,它將直接設置實例變量。

無論你是否爲你的網點定義屬性真的是個人品味的問題。我這樣做,因爲網點是由外部對象(NSBundle類)設置的,因此我認爲它們是我視圖控制器的API合約的一部分。

0

我相信你在考慮這個錯誤。

只有存在插座才能使外部對象Interface Builder代碼和nib解碼器可以使用插座配置類的實例。隱藏在@protected或@private之後的出口將會擊敗他們的全部目的。

在良好的設計中,這應該不成問題,因爲視圖控制器應該是相對輕量級的對象,其唯一功能是在視圖和模型之間移動數據。應用程序的核心邏輯應該安全地封裝在模型中。

如果您需要一個安全的設計,您可以通過編程方式創建視圖,並將其設置爲私人,但您失去了所有靈活性和重複使用。這是一個折衷。

但是,在任何一種情況下,這都與內存管理和屬性無關。無論屬性是公共的,受保護的還是私人的,與屬性內存的管理方式無關。