每天一点iOS知识回顾5

1.ViewController 的alloc,loadView, viewDidLoad,viewWillAppear,viewDidUnload,dealloc、init分别是在什么时候调用的?在自定义ViewController的时候这几个函数里面应该做什么工作?

Alloc 申请内存空间的时候调用. 初始化当前的ViewController
Init视图初始化的时候,赋一些程序的初始值
LoadView加载视图的时候调用  self.view != nil的时候,执行loadview,加载一些自己的视图
ViewDidLoad视图已经加载的时候调用(网络数据之类的,刷新表之类)(添加通知)
ViewWillAppear视图将要出现的时候(tabbar切换)
废弃方法:ViewDidUnload视图已经卸载(内存不足)(数据释放掉)(移除通知)现在是disd receive memory waring
Dealloc视图已经销毁的时候(self.view = =nil)自己拥有的实例变量释放掉
第三页

2.描述应用程序的启动顺序。

总结程序启动的过程如下:
程序入口main函数创建UIApplication实例和UIApplicationDelegate实例。
在UIApplication代理实例中重写启动方法,设置第一视图ViewController。
在第一ViewController中添加控件,实现应用程序界面( UI展现)。

3.为什么很多内置类如UITableViewControl的delegate属性都是assign而不是retain?请举例说明。

为了避免循环饮用释放不掉的问题。
例子:对象a创建并引用了对象b.对象b创建并引用了对象c.对象c创建并引用了对象b.这时候b和c的引用计数分别是2和1。当a不再使用b,调用release释放对b的所有权,因为c还引用了b,所以b的引用计数为1,b不会被释放。b不释放,c的引用计数就是1,c也不会被释放。从此,b和c永远留在内存中。或者:Student * str=[];
Teacher *teacher=[[Teacher alloc] init];
Student * student=[[Student alloc] init];
teacher.delegate=student;
student.delegate= teacher;
在teacher中dealloc会release当前的Delegate,就会触发student对象release,继而也会导致student执行dealloc,在student中也会release自己的delegate,产生循环了。

4.使用UITableView时候必须要实现的几种方法?

-(NSInteger)tableView:(UITableView*)tableViewnumberOfRowsInSection:(NSInteger)section; 这个方法返回每个分区的行数
-(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath)indexPath;这个方法返回我们调用的每一个单元格

5.写一个便利构造器。

+(id)Person{
Person *person=[Person alloc]init];
Return [person autorelease];

}

你可能感兴趣的:(assign,viewwillappear,便利构造器,程序启动顺序,tableview协议方法)