IOS开发之delegate和Notification的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS开发之delegate和Notification的区别相关的知识,希望对你有一定的参考价值。

  区别一:delegate针对one-to-one关系,并且reciever可以返回值给sender;notification 可以针对one-to-one/many/none,reciever无法返回值给sender;所以,delegate用于sender希望接受到reciever的某个功能反馈值,notification用于通知多个object某个事件。
  区别二:
  Delegate:消息的发送者(sender)告知接收者(receiver)某个事件将要发生,delegate同意然后发送者响应事件,delegate机制使得接收者可以改变发送者的行为。通常发送者和接收者的关系是直接的一对多的关系。
  Notification:
消息的发送者告知接收者事件已经发生或者将要发送,仅此而已,接收者并不能反过来影响发送者的行为。通常发送者和接收者的关系是间接的多对多关系。
  区别三:效率肯定是delegate比nsnotification高。
区别四:delegate方法比notification更加直接,最典型的特征是,delegate方法往往需要关注返回值,也就是delegate方法的结果。
  delegate用于声明委托。Notification用于通告。委托是一种引用类型,引用类型的 Shared 方法或对象的实例方法。任何具有匹配参数类型和返回类型的过程均可用来创建此委托类的实例。然后就可以通过委托实例来调用过程。
参考技术A 一般来说呢 delegate是两个类之间的关系,通知就不同了,可以一对多,也可以多对一,还可以多对多,就是一个发布者一个监听者,一个发布者多个监听者,多个发布者多个 多个监听者 代理需要有协议 要声明协议 实现协议中方法 设置代理 通知需要设置通知中心 设置发布者和监听者本回答被提问者和网友采纳

iOS UIKit-UIPageControl利用delegate定位圆点位置 之 四舍五入小技巧

在UIScrollView中会加入UIPageControl作为页码标识,能够让用户清楚的知道当前的页数。我们须要优化的一点是让pageControl的小圆点精确的跟着scrollView而定位。我们先来看一下效果图:

技术分享图片

我们发现。当图片拖动不到一半的时候,pageControl的圆点定位到前一张图,图片拖动超过一半的时候。定位到下一张图。这里就须要四舍五入的计算了。

我们能够利用协议 delegate 去做这件事情。

首先,我们要为当前我们设置的这个scrollView加入代理:

scrollView.delegate = self;

这里必需要让当前类去遵守 UIScrollViewDelegate 协议。



在 UIScrollViewDelegate 中。有这么一个方法。仅仅要scrollView滚动就能够触发。

我们能够在这种方法中去实现。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    // 用水平移动的距离除以宽度等于页数,可是并没有精确
    double page = scrollView.contentOffset.x / scrollView.width;
    
    // 採用四舍五入来确定更靠近哪一页。并设置(以下是一个四舍五入的小技巧,+ 0.5 再向下取整就可以)
    self.pageControl.currentPage = (int)(page + 0.5);
}

分析举例说明:(page = 0 为第一张图片,page = 1 为第二张图片,以此类推)

page = 0.95,更接近第二张图片。page + 0.5 = 1.45。(int)1.45 = 1

page = 1.21,更接近第二张图片。page + 0.5 = 1.71。(int)1.71 = 1

page = 1.67。更接近第三张图片。page + 0.5 = 2.17,(int)2.17 = 2

page = 2.11,更接近第三张图片,page + 0.5 = 2.61,(int)2.61 = 2

另外注意的是。强制转化为int类型是向下取整,即省略小数点后的全部数字。







以上是关于IOS开发之delegate和Notification的区别的主要内容,如果未能解决你的问题,请参考以下文章

iOS 开发 delegate详解

ios开发 delegate怎么弹出全局弹框

iOS8开发之iOS8的UIAlertController

iOS开发之 音频播放

IOS开发-UI学习-delegate(代理)的使用

iOS开发Delegate,Notification,Block使用心得