[問題] viweDidUnload該填的內容為何?
之前沒有聽過有viewDidUnload這個delegate,
似乎是3.0才冒出來的東西,
對其的使用時機不是很清楚。
Apple原始的註解為
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
似乎是只有用在界面上的outlet需要設為nil,
而保存資料用的NSArray等不需要。
但我看很多sample code,卻是將所有的class ivar全部設為nil。
因為我在Navigation Control時,是用傳遞物件的方式,
讓前後的view能夠交換資料,
很怕在這個地方設錯會出問題,
偏偏viewDidUnload似乎是在記憶體不夠時才會被呼叫,
現在根本沒辦法測。
另外, 設self.myOutlet = nil; 與 [self.myOutlet release]; 的差別為何呢?
在此能不能使用[self.myOutlet release];呢?
最後想再偷偷請教一下,
在custom table view cell時,
會先建立subview物件,再將此加入cell的subview中,
那這個subview需要呼叫release method嗎?
比方說
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier] autorelease];
UITextField *textField = [[UITextField alloc] initWithFrame:
CGRectMake(10, 12, 280, 25)];
textField.clearsOnBeginEditing = NO;
textField.returnKeyType = UIReturnKeyDone;
textField.text = self.event;
[textField setDelegate:self];
[cell.contentView addSubview:textField];
[textField release];
}
若有最後一行,會讓程式crash,crash原因為objc_msgsend,
我查到的意思是,可能是送訊息給已經被釋放的物件。
若將[textField release];註解掉,
便可正常work。
但這種情況在將UITextField改為UILabel卻不會發生,
另外我將最後一行改成textField=nil;
也是可以正常work。
想請教是什麼原因,謝謝!
--
▂▃▄▃▂
◢ ˙ ◣
˙ ▅
▉▃ /◤ 喵喵~~~~
▊▏◣╲ˍ ╱▎
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.126.4.1
推
08/04 22:09, , 1F
08/04 22:09, 1F
→
08/04 22:10, , 2F
08/04 22:10, 2F
→
08/04 22:10, , 3F
08/04 22:10, 3F
→
08/04 22:11, , 4F
08/04 22:11, 4F
→
08/04 22:11, , 5F
08/04 22:11, 5F
→
08/04 22:13, , 6F
08/04 22:13, 6F
→
08/04 22:14, , 7F
08/04 22:14, 7F
→
08/04 22:14, , 8F
08/04 22:14, 8F
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 4 篇):
MacDev 近期熱門文章
PTT數位生活區 即時熱門文章