84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
相求一个资料:IOS中各种传值方法的优缺点:我特别想知道属性传值与代理传值、通知、块传值的优缺点?
目前小弟只会代理和属性,但是就这两种也不知道有啥不同,小弟为小白求赐教~~搜索了很多也没有没有详尽的资料如果您有麻烦指导下。
业精于勤,荒于嬉;行成于思,毁于随。
1、属性最直接,两个对象可以直接接触的,比如一个UIViewControllerA里构建一个UIImageView,给UIImageView提供图片。2、代理的环境一般是:A操作B,然后B没有马上返回结果,等待条件满足是B回来通知A.常见的是网络请求,特点是它有一个回来的动作。3、block在行为上和delegate类似,也是用于回调的。但是(1)block写起来爽一点,比如弹框,弹出框后点击事件回调,我构建一个alertView,马上接着就可以写它的回调alertView.clickBlock = xxx,而delegate我还要再建一个方法 (2)block会copy它内部的对象,这个会有很好的隔离作用,比如A是一个通用的单例,B->A->C,然后C处理完回调B,E->A->F,然后F处理完回调E,假如是delegate,C回调到A之后,A是回调给B还是E呢?A不知道。但block会copy对象,B创建block的时候把自己copy进去,C得到的回调对象就是B。这一点有点难理解。4、通知相对前两者就是:(1)一对多,一个通知发出去,所有的接收者都有反应,而且是同步的。 (2)发出者和接受者之间没有直接的关联,特别是在复杂的项目里,两个对象无法互相接触的时候,用通知可以发消息,就是容易乱。比如登录成功了,要更新数据,可能很多地方,而登录模块是专注于登录,登录成功后该做哪些不应该由它来管理,所以用通知比较好。当然,项目尽量少交叉交互吧。
1、属性最直接,两个对象可以直接接触的,比如一个UIViewControllerA里构建一个UIImageView,给UIImageView提供图片。
2、代理的环境一般是:A操作B,然后B没有马上返回结果,等待条件满足是B回来通知A.常见的是网络请求,特点是它有一个回来的动作。
3、block在行为上和delegate类似,也是用于回调的。但是(1)block写起来爽一点,比如弹框,弹出框后点击事件回调,我构建一个alertView,马上接着就可以写它的回调alertView.clickBlock = xxx,而delegate我还要再建一个方法 (2)block会copy它内部的对象,这个会有很好的隔离作用,比如A是一个通用的单例,B->A->C,然后C处理完回调B,E->A->F,然后F处理完回调E,假如是delegate,C回调到A之后,A是回调给B还是E呢?A不知道。但block会copy对象,B创建block的时候把自己copy进去,C得到的回调对象就是B。这一点有点难理解。
4、通知相对前两者就是:(1)一对多,一个通知发出去,所有的接收者都有反应,而且是同步的。 (2)发出者和接受者之间没有直接的关联,特别是在复杂的项目里,两个对象无法互相接触的时候,用通知可以发消息,就是容易乱。比如登录成功了,要更新数据,可能很多地方,而登录模块是专注于登录,登录成功后该做哪些不应该由它来管理,所以用通知比较好。当然,项目尽量少交叉交互吧。