2012-11-12 111 views
0

有人能向我解釋爲什麼這個工程:IOS設置屬性的語法問題

SpecialView *view = [[SpecialView alloc]initWithFrame:CGRectMake(0, 0, 320, 164)]; 
self.specialView = view; 
self.tableView.tableHeaderView = self.specialView; 

這並不:

self.specialView = [[SpecialView alloc]initWithFrame:CGRectMake(0, 0, 320, 164)]; 
self.tableView.tableHeaderView = self.specialView; 

非常感謝您!

編輯1:在.H屬性是這樣的:

@property (weak, nonatomic) SpecialView *specialView; 

當我的意思是它不工作,我指的是在最後的self.specialView爲零。 (是的,我正在使用ARC)

+0

顯示你的財產聲明這兩個 –

+0

你是什麼意思的「不工作」?它看起來是正確的(假設ARC)。 – rmaddy

+0

編輯回答你們倆:) – ItsASecret

回答

4

您的財產被定義爲weak。這意味着參考不被保留。這也意味着當對象被釋放時,該屬性將被設置爲nil

在第一位代碼中,您將SpecialView實例分配給本地(強)變量。這使對象保持了一點。然後,將實例分配給(弱)屬性。這沒有任何幫助。但是,然後將弱屬性分配給表視圖的標題。在本地變量view超出範圍之後,這是額外的引用,可以使實例保持活動狀態。但是,如果您要爲表格指定另一個標題或者表視圖消失,則特殊視圖將被釋放並解除分配,並且該屬性將重置爲零。

在第二位代碼中,您沒有本地變量。因此,該對象立即釋放並釋放,並且該屬性被重置爲nil

您的財產很可能需要定義爲strong而不是weak

+0

好吧給我幾秒 – ItsASecret

+0

好吧它的工作,非常感謝你,我會選擇你作爲正確的答案,但你可以告訴我爲什麼tableView是微弱的,而不是這個headerView?謝謝 – ItsASecret

+0

可能是因爲表視圖被添加爲子視圖,所以它仍然有其他引用。 – rmaddy