Re: [問題] 問幾個iOS的問題
我也剛學iOS沒多久...
那我來分享一下經驗好了..
有錯請各位大大指正
※ 引述《shinrenpan (好無聊,丟個水球來吧)》之銘言:
: ViewDidLoad跟loadView的差別
loadView是如果你要自己產生View而非透過nib的話
你要把你產生view的邏輯寫在這
如果你是打算從nib load..請不要改寫這個method
此method會在view沒有被load
而controller.view被用到的時候被呼叫
ViewDidLoad是view產生完才會call
不管是透過nib.. 或是你自己的loadView
: -(id)initWithCoder:(NSCoder *)aDecoder
: 何時會用到呢?
這個是來自於NSCoding protocol
如果你想要讓你的Class可以支援serialize就必續提供這邊的實作
細節請看http://goo.gl/SCY9I
初學者第一次看到這個應該是從UIView這邊看到的
文件也說如果你的view是從Nib來的話 記得要實作這個method
: -(void)awakeFromNib
: 何時會用到呢?
這個是從NSObject UIKit Additions Reference定義的
當你的物件從nib產生的..產生完會callback這個method
所以如果你的class有需要在nib產生完有些動作
例如對你關連的IBOutlet properties有些動作
可以寫在這裡
: - (void)viewDidUnload 跟 - (void)didReceiveMemoryWarning
: 觸發的條件
其實不太需要特別管說什麼是後會觸發
UIViewController只要不在前景都有可能在觸發
其中viewDidUnload要注意的是要把loadView產生的object也要跟著清掉
如果你的view是從nib來的..記得也要把IBOutlet的properties設成nil
以免memory leakage.
: -(void)viewDidAppear:(BOOL)animated
: 我的理解是當這個view顯示完成時會call這個funtion
: 但是當2個UIViewController A 跟 B
: 在A的(void)viewDidLoad 設置self.view = B.view
: 為什麼B的(void)viewDidAppear:(BOOL)animated 無法響應
UIViewController的view都是"被動的"等底層呼叫你的loadView
只要在loadView當中..我們才會賦予self.view到一個view instance
用別的controller的view指過來不是正確的用法
而viewDidAppear這個動作是viewController的view被addSubview才會發生
這也可以解釋你這個動作為什麼不會被響應
: 2個UIViewController A 跟 B
: 當 [A presentModalViewController:B animated:YES]
: 然後[B dismissModalViewControllerAnimated:YES] 回到A後
: B佔用的記憶體會清除嗎(包含B裡面所有的物件)
: 當A push到B, B pop 回A, B佔用的記憶體會清除嗎(包含B裡面所有的物件)
所有記憶體是否會清除決定於retain count
理論上是會被清除
你可以在B的dealloc那邊設中斷點攔攔看
如果沒被呼叫
可能你要檢查有沒有地方忘了release
: 當某個物件A = [[[NSObject alloc]init]autorelease]
: A會在什麼條件下release呢?
: 可以強制將autorelease的物件release嗎?
每個app都有runloop
當處理你目前的message跑完
就會release
講的有點抽象
建議可以參考http://goo.gl/NNGYH
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.251.162
討論串 (同標題文章)
MacDev 近期熱門文章
PTT數位生活區 即時熱門文章