理论知识整合笔记

1、loadView和viewDidLoad的区别就是,loadView时view还没有生成,viewDidLoad时,view已经生成了,loadView只会被调用一次,而viewDidLoad可能会被调用多次(View可能会被多次加载),当view被添加到其他view中之前,会调用viewWillAppear,之后会调用viewDidAppear。当view从其他view中移除之前,调用viewWillDisAppear,移除之后会调用viewDidDisappear。当view不再使用时,受到内存警告时,ViewController会将view释放并将其指向为nil。

 

ViewController的生命周期中各方法执行流程如下:

init—>loadView—>viewDidLoad—>viewWillApper—>viewDidApper—>viewWillDisapper—>viewDidDisapper—>viewWillUnload->viewDidUnload—>dealloc

 
2、懒加载方法。其实就是重新定义了getter方法
需注意的是在getter方法里切勿使用self.shopData,因为self.shopData会调用getter方法,造成死循环
iOS的点语法,放等号右边就是调用getter,放左边就是调用setter
 
3、delegate,block,notification三者区别(论坛收集整理)
通知:“一对多”,在APP中,很多控制器都需要知道一个事件,应该用通知;一旦注册了观察者,在dealloc里面一定要移除
 
delegate:
1)“一对一”,对同一个协议,一个对象只能设置一个代理delegate,所以单例对象就不能用代理;
2)代理更注重过程信息的传输:比如发起一个网络请求,可能想要知道此时请求是否已经开始、是否收到了数据、数据是否已经接受完成、数据接收失败
3)delegate相较于block运行成本更低
 
block:
1)写法更简练,不需要写protocol、函数等等但相较于delegate运行成本高
block出栈需要将使用的数据从栈内存拷贝到堆内存,当然对象的话就是加计数,使用完或者block置nil后才消除;delegate只是保存了一个对象指针,直接回调,没有额外消耗。相对C的函数指针,只多做了一个查表动作 
2)block注重结果的传输:比如对于一个事件,只想知道成功或者失败,并不需要知道进行了多少或者额外的一些信息
3)block需要注意防止循环引用:
 
ARC下这样防止:
__weak typeof(self) weakSelf = self;
  [yourBlock:^(NSArray *repeatedArray, NSArray *incompleteArray) {
       [weakSelf doSomething];
    }];
 
非ARC
 
__block typeof(self) weakSelf = self;
  [yourBlock:^(NSArray *repeatedArray, NSArray *incompleteArray) {
       [weakSelf doSomething];
    }];
posted @ 2016-08-31 23:16  锦夏ing  阅读(149)  评论(0编辑  收藏  举报