Re: [問題] 問幾個iOS的問題

看板MacDev作者 (畢業了..@@")時間14年前 (2011/02/17 11:29), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
我也剛學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
文章代碼(AID): #1DN9OJyS (MacDev)
討論串 (同標題文章)
文章代碼(AID): #1DN9OJyS (MacDev)