单例传值
实际开发中,一般将用户的信息储存在单例之中,单例保证了只有一个事例,一旦系统调用单例方法,就可以对其中的内容进行修改,读取等等。
属性传值
实际开发中,经常会遇到这种情况:前一个页面push到一个新的控制器,push的过程中,需要alloc一个新的控制器实例,我们还需要将前一个页面的信息传递到新建的控制器中,例如系统的通讯录,点击某一个联系人会有部分信息显示到下一控制器。 如何解决呢,我们在新alloc的控制器中声明需要接受数据的类型的属性。直接肤质即可。
代理传值
原理是在委托者里赋值,在实现者里通过回调方法取值。
Block传值
个人感觉和代理基本相同,都是回调,通俗的说,就是可以将我的值传给我的代理,不明白可以想一下tableView的代理,创建cell的时候,需要一个indexPath参数,参数哪里来的呢?tableView给的,代理这个打工仔完成了cell的创建,tableView是老板。Block比代理容易写,因为设为属性之后就可以回调了,不用再麻烦的写协议,遵守代理,设置代理。另外block只是一个代码块,储存在栈区,效率也是很高的,系统管理嘛,速度没的说。不用就会被释放掉,这也是为什么我们需要在block的属性声明里面用copy的原因。