美文网首页
iOS中消息传递方式 - 07

iOS中消息传递方式 - 07

作者: 庚妖素 | 来源:发表于2018-11-05 11:01 被阅读0次

一.通知:在iOS中由通知中心进行消息接收和消息广播,是一种一对多的消息传递方式。

二.代理:是一种通用的设计模式,iOS中对代理支持的很好,由代理对象、委托者、协议三部分组成。

三.block:iOS4.0中引入的一种回调方法,可以将回调处理代码直接写在block代码块中,看起来逻辑清晰代码整齐。

四.target action:通过将对象传递到另一个类中,在另一个类中将该对象当做target的方式,来调用该对象方法,从内存角度来说和代理类似。

五.KVO:NSObject的Category-NSKeyValueObserving,通过属性监听的方式来监测某个值的变化,当值发生变化时调用KVO的回调方法。

.....当然还有其他回调方式,这里只是简单的列举。

一:Target-action模式

主要是按钮,添加手势事件上面使用,

1、直接通过XIB上拖拽连线

2、以代码的方式实现

-(void)addTarget:(id)target action:(SEL)forControlEvents:(UIControlEvents)controlEvents

3、添加手势

二:block

涉及到block就必须说道:

1.C语言内存分配

Objective-C从名字来看就可以知道是一门超C语言,所以了解C语言的内存模型对于理解Objective-C的内存管理有很大的帮助。C语言内存模型图如下:

栈区(stack):存放函数的参数值、局部变量的值等,由编译器自动分配释放,通常在函数执行结束后就释放了,其操作方式类似数据结构中的栈。栈内存分配运算内置于处理器的指令集,效率很高,但是分配的内存容量有限,比如iOS中栈区的大小是2M。

堆区(heap):就是通过new、malloc、realloc分配的内存块,它们的释放编译器不去管,由我们的应用程序去释放。如果应用程序没有释放掉,操作系统会自动回收。分配方式类似于链表。

静态区:全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后,由系统释放。

常量区:常量存储在这里,不允许修改的。

代码区:存放函数体的二进制代码。

栈区和堆区的区别主要为以下几点:

对于栈来说,内存管理由编译器自动分配释放;对于堆来说,释放工作由程序员控制。

栈的空间大小比堆小许多。

栈是机器系统提供的数据结构,计算机会在底层对栈提供支持,所以分配效率比堆高。

栈中存储的变量出了作用域就无效了,而堆由于是由程序员进行控制释放的,变量的生命周期可以延长。

2.声明block属性的时候为什么用copy呢?

MRC环境下:访问外界变量的block默认存储在栈区。

ARC环境下:访问外界变量的block默认存放在堆中,实际上是先放在栈区,在ARC情况下自动又拷贝到堆区,自动释放。

使用copy修饰符的作用就是将block从栈区拷贝到堆区

通过官方文档可以看出,复制到堆区的主要目的就是保存block的状态,延长其生命周期。因为block如果在栈上的话,其所属的变量作用域结束,该block就被释放掉,block中的__block变量也同时被释放掉。为了解决栈块在其变量作用域结束之后被释放掉的问题,我们就需要把block复制到堆中

3.加上__block就可以修改block外面的变量了

在block不是作为一个property的时候,可以在block里面直接使用self,比如UIView的animation动画block。

当block被声明为一个property的时候,需要在block里面使用weakSelf,来解决循环引用的问题。

当和并发执行相关的时候,当涉及异步的服务的时候,block可以在之后被执行,并且不会发生关于self是否存在的问题。

三:代理

1.代理传值

2.代理 添加方法 

四:通知

五:KVO

相关文章

  • iOS模式之二:代理模式

    iOS中消息传递方式 在iOS中有很多种消息传递方式,这里先简单介绍一下各种消息传递方式。 通知:在iOS中由通知...

  • iOS中消息传递方式 - 07

    一.通知:在iOS中由通知中心进行消息接收和消息广播,是一种一对多的消息传递方式。 二.代理:是一种通用的设计模式...

  • iOS开发需要掌握的技能篇

    基础知识储备1. iOS的消息传递方式-1.通知2.iOS的消息传递方式-2.代理3.iOS的消息传递方式-3.B...

  • iOS中消息传递方式

    通知:在iOS中由通知中心进行消息接收和消息广播,是一种一对多的消息传递方式。 代理:是一种通用的设计模式,iOS...

  • 消息传递机制的选择

    消息传递机制 分类 在一个应用中不同的对象之间需要通过相互传递消息的方式结合起来共同完成任务。iOS 中主要的消息...

  • 问题:什么是代理模式?

    在iOS中有很多种消息传递方式,首先简单了解一下常见的消息传递的几种方式 通知(notification):在iO...

  • iOS开发---图解代理

    什么是代理? 代理(Delegate)是iOS开发中的一种重要的消息传递方式,是iOS开发中普遍使用的通用设计模式...

  • iOS UIButton iOS开发-消息传递方式-targe

    target-action是iOS中UIControl控件下使用的最常见的消息传递方式,target-action...

  • iOS开发-消息传递方式-target-action

    target-action是iOS中UIControl控件下使用的最常见的消息传递方式,target-action...

  • 代理的基本使用

    iOS中傳值的方法有這些1.通知:在iOS中由通知中心进行消息接收和消息广播,是一种一对多的消息传递方式。2.代理...

网友评论

      本文标题:iOS中消息传递方式 - 07

      本文链接:https://www.haomeiwen.com/subject/mjojxqtx.html