作者popcorny (毕业了..@@")
看板MacDev
标题Re: [问题] 问几个iOS的问题
时间Thu Feb 17 11:29:21 2011
我也刚学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