2011-05-26 51 views
0

我通過將XIB編輯器中的UI組件拖動到我的視圖控制器的頭文件中來創建IBOutlets。我在花括號內拖放,以便將它們簡單地視爲實例變量而不是屬性。然而,儘管如此,我注意到我的viewDidUnload和dealloc方法中的釋放語句。這不是沒有必要嗎?就像我說的,這些不是我創造的屬性。爲什麼生成的代碼在沒有保留,分配,複製等時釋放這些對象?在Xcode 4中添加插座

回答

1

在iOS上,如果出口被宣佈爲伊娃,而不是一個屬性,你負責在適當的時候釋放它(即-dealloc-viewDidUnload。你也應該將它們設置爲nil後者。 )

這是由於iOS上內存管理的怪癖。無論如何,我的個人偏好是避免使用readwrite屬性的網點,因爲恕我直言,它打破了視圖控制器的封裝不良。

+0

我不明白爲什麼如果我沒有分配,保留或複製它,爲什麼我應該釋放一個插座? – NSExplorer 2011-05-26 21:23:34

+1

通常情況下你不會。這是一個罕見的例外。你的'release'平衡了Nib解碼完成時的'retain'或'alloc'。 – 2011-05-26 21:32:35

1

我認爲原因是所有的網點都應該保留屬性。這樣所有的視圖子視圖(你的按鈕等)將保證活得比視圖本身更長。我從來沒有聽說過你編碼的方式。通常你只需輸入代碼並將你的插座連接到.xib。

+0

真的嗎?好吧,我早就想過了,但後來我遇到了這本書:Bill Dudney和Chris Adamson撰寫的iPhone SDK開發。在大多數例子中,他們不會將IBOutlets聲明爲屬性! – NSExplorer 2011-05-26 21:19:24

+0

查看Apple文檔。在這個頁面的中間向下滾動,討論網點。 http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iPhone101/Articles/05_ConfiguringView.html。您也可以在此頁面上查看將視圖控制器設置爲屬性的內容,以確保它與應用程序一樣長。 http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iPhone101/Articles/03_AddingViewController.html%23//apple_ref/doc/uid/TP40007514-CH5-SW1。子視圖也是一樣。你不希望在屏幕上看到你的視圖被釋放 – Jamie 2011-05-27 03:59:49

1

你不需要讓它們屬性,2.0之前的Objective-C沒有包含屬性,屬性只是語法糖。

當它們被拉出筆尖時,它們被保留。

檢出The Nib Object Life Cycle部分