Protocol与Delegate 使用方法详解

【C++】POCO学习总结(八):通知Notifications和事件Events Poco::NotificationCenter或Poco::NotificationQueue位于源source和目标target之间,并将它们解耦。2)事件Events:如果观察者确实关心事件的源source,或者希望仅从特定源source接收事件,则使用事件Events。1)通知Notifications:如果观察者不知道或不关心事件的来源,则使用通知Notifications。事件还支持异步通知和一些Notifications不支持的特性。4)Notifications通知的调度流程。 阅读详情

你要知道的KVC、KVO、Delegate、Notification都在这里

转载请注明出处 http://blog.csdn.net/u014205968/article/details/78224825

本系列文章主要通过讲解KVC、KVO、Delegate、Notification的使用方法,来探讨KVO、Delegate、Notification的区别以及相关使用场景,本系列文章将分一下几篇文章进行讲解,读者可按需查阅。

Protocol与Delegate 使用方法详解

protocol协议类似于Java的接口,规定一系列实现类应该遵守的方法,OCprotocol协议远没有Java中的interface使用频率高,毕竟在Java中面向接口编程更加盛行,但OC使用较频繁的代理模式delegate就是以protocol作为基础实现的。代理模式是OC中一个非常重要的概念,接下来将从protocol协议开始逐一进行讲解。

实现协议还有一种方法,就是通过类别category实现,前面两篇文章讲解的KVCKVO的实现都是依赖于类别而不是接口,类别提供了一种限定性更弱,并且不需要修改源代码的方式来为已有类添加新的方法,非常适用于扩展第三方或是系统提供的已有类。

接下来举一个通过类别category扩展实现协议的栗子:

#import <Foundation/Foundation.h>

@interface NSObject (Flyable)

- (void)fly;

@end

@interface Bird : NSObject

@end

@implementation Bird

- (void)fly
{
    NSLog(@"I can fly!!!");
}

@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        NSObject *obj = [[Bird alloc] init];
        [obj fly];
    }
    return 0;
}

上面的栗子首先定义了一个Flyable的类别,扩展的是NSObject类,接着定义了Bird类,该类继承自NSObject类,因此也继承了fly方法,在Bird类的实现中实现了fly方法,因此在main函数中可以通过NSObject来调用fly方法。category类别并不要求扩展类的子类实现类别中声明的所有方法,因此,如果Bird类没有实现fly方法再调用fly方法时会抛出异常,因此,正确的使用方法应该先判断其是否能够响应相关方法:

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        NSObject *obj = [[Bird alloc] init];
        //判断是否能够响应fly方法
        if ([obj respondsToSelector:@selector(fly)])
        {
            [obj fly];
        }
    }
    return 0;
}

类别category不能强制要求子类实现其声明的方法,所以如果有必须要子类实现的方法应当使用protocol协议来定义,举个协议的例子:

#import <Foundation/Foundation.h>

脱壳--02.exe 程序开始 使用OD打开程序 发现无法利用esp定律 程序直接运行 查找模块间调用 随便找到一个函数的调用 发现是FF15方式调用 所以是vs的程序 vs程序大致分成两种 vs20xx (特征函数:GetSystemTimeAsFileTime)和 vc++6.0(特征函数:GetVersion) 通过链接器版本 发现是vc6.0 直接在GetVersion上下断点 重新运行程序 断点断下 返回到调用处 vc6.0和易语言的第一个CALL都是GetVers... 阅读详情

相关推荐

【OpenCV】图像的像素直方图 图像特征点 cv::FAST cv::ORB ORB_SLAM2::ORB

文章目录图像直方图代码实现cv::FAST和cv::ORB 检测图像特征点cv::FAST和cv::ORB 检测图像特征点代码实现ORB_SLAM2::ORB和自己实现ORB图像特征点检测效果对比ORB_SLAM2::ORB和自己实现ORB图像特征点检测效果对比代码实现 图像直方图代码实现 图像是由不同数值(颜色)的像素构成的,像素值在图像中的分布情况是图像的重要属性,可以用直方图修改图像的外观,标识图像的内容,检测图像中特定的物体或纹理。 单通道灰度图像中每个像素都有一个 0(黑色)-255(白色)的整

小秋 AI SLAM 入门实战教程 2465

POCO C++库学习和分析 -- 通知和事件 (四)

POCO C++库学习和分析 -- 通知和事件 (四) 5. 事件 Poco中的事件和代理概念来自于C#。对于事件的使用者,也就是调用方来说,用法非常的简单。 5.1 从例子说起 首先让我们来看一个同步事件例子,然后再继续我们的讨论: #include "Poco/BasicEvent.h" #include "Poco/Delegate....

weixin_30915275的博客 573

COMSOL等离子体教程pdf

COMSOL等离子体教程pdf

Poco库源码解析】Poco库的事件

(1)source.theEvent += Poco::delegate(&target, &Target::onEvent)时, Poco::delegate会创建Delegate<TObj, void, true>(pObj, NotifyMethod);(2) += 会 _strategy.add(aDelegate);将代理保存在_strategy, _strategy默认是 DefaultStrategy。

j497205974的博客 1484

Poco版信号槽

#include "Poco/BasicEvent.h"#include "Poco/Delegate.h"#include <iostream>using Poco::BasicEvent;using Poco::Delegate;#include <typeinfo>class A{public: BasicEvent<std::string&gt...

dijie1999的博客 282

POCO C++库入门指南(翻译)

官方文档链接: A Guided Tour Of The POCO C++ Librarieshttps://docs.pocoproject.org/current/00100-GuidedTour.html 目录 介绍 Foundation库 XML库 Util库 Net库 将这些东西组合到一起 介绍 POCO C++库是一组开源C++类库的集合,它们简化及加速了用C++来开发以网络功能为核心的可移植程序的过程。这些库,完美地C++标准库结合到一起,并且填补了它...

紫月下枫叶的博客 8410

传参方法:sharedApplication, NSUserDefaults, protocoldelegate(实例)

本文转载至 http://blog.csdn.net/learnios/article/details/8442201 分类:功能模块2012-12-27 10:22109人阅读评论(0)收藏举报 IOS基础ios基础 1.iOS开发中使用[[UIApplication sharedApplication] openURL:] 加载其它应用 ...

a1311010193的博客 73

Block代替delegate,尽量使用block,对于有大量的delegate方法才考虑使用protocol实现.

Block代替delegate,尽量使用block,对于有大量的delegate方法才考虑使用protocol实现. 1.Block语法总结及示例如下: //1.普通代码块方式block returnType (^blockName)(parameterTypes) = ^returnType(parameters) { // blo...

200

Delegateprotocol的理解

其实delegate常说委托,委托类。protocol协议,实现协议。 先阅读一下这篇文章: http://haoxiang.org/2011/08/ios-delegate-and-protocol/#comment-581 那么我们怎么理解它们呢? 文章中作者也说道,protocol就是Objective-c的一个语法罢了。 @protocol ClassADelegate

Chiuan的专栏 2552

delegateprotocol

delegateprotocolprotocoldelegate完全不是一回事,放在一起说,只是因为我们经常在同一个头文件里看到这两个word。协议(protocol),就是使用了这个协议后就要按照这个协议来办事,协议要求实现的方法就一定要实现。委托(delegate),顾名思义就是委托别人办事,就是当 一件事情发生后,自己不处理,让别人来处理。举个浅显的例子:...

weixin_34405332的博客 89

c++实现类似c#的事件,依赖Poco

#include “Poco/BasicEvent.h” #include “Poco/Delegate.h” #include using Poco::BasicEvent; using Poco::delegate; class Source { public: BasicEvent theEvent; void fireEvent(int n) { theEvent(this, n); } }; class Target { public: void onEvent(const void*

hk595 311

linux获取网络帧,在linux平台上发送一个以太网数据帧

#include #define IFALIASZ 256typedef char INT8;#define VSTRONG_PROTOCOL 0x0807#define DEBUGMSG(cond,printf_exp)int main(int argc, char **argv) {int i,send_flag=0;struct sockaddr_ll stTagAddr;char sz...

weixin_42297675的博客 939

黑马程序员--OC之@protocol的概念以及使用

黑马程序员--OC之@protocol的概念以及使用 ------- android培训、java培训、期待您交流! ---------- 1、协议的概念     接口就是一堆方法的声明没有实现,而在OC里面,Interface是一个类的头文件的声明,并不是真正意义上的接口的意思,在OC中,接口是由一个叫做协议的protocol来实现的。 2、protocol使用流程     协议的

hxwwn的博客 516

POCO C++库学习和分析 -- 序

POCO C++库学习和分析 -- 序 1. POCO库概述: POCO是一个C++的开源库集。同一般的C++库相比,POCO的特点是提供了整一个应用框架。如果要做C++程序应用框架的快速开发,我觉得STL+boost+Poco+Qt+Mysql实在是个不错的组合。 下面的这张图提供了POCO库的一个结构。 对于POCO概述更加详细的介绍,可以看

u010129251的专栏 2万+

poco 2:Event

2015-01-28 星期三 21:39:28 1、Event时序图 2、Event Class 3、Event Demo BasicEventTest.cpp testNoDelegate += --> -= --> notify() 1 2 3 4 5 6

自由度 1203

POCO C++库学习和分析 -- Cache

POCO C++库学习和分析 -- Cache 1. Cache概述 在STL::map或者STL::set中,容器的尺寸是没有上限的,数目可以不断的扩充。并且在STL的容器中,元素是不会自动过期的,除非显式的被删除。Poco的Cache可以被看成是STL中容器的一个扩充,容器中的元素会自动过期(即失效)。在Poco实现的Cache框架中,基础的过期策略有两种。...

weixin_30703911的博客 487
上一篇: KVO 正确使用姿势进阶及底层实现
下一篇: NSNotificationCenter 通知使用方法详解
这个名字到底好不好
博客等级 码龄12年 84粉丝 32原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值