object-c 回调函数

xiaoxiao2021-02-28  49

回调函数

Java和C++编程中都常用到回调函数 对象A具有某些接口 对象B实现这些接口并由对象A在某个时机调用实现的接口 C++:纯虚函数实现 class test { public: virtual void call()=0; }; class child : public test { void call() { cout << "child call" << endl; } }; class demo { public: void setListener(test *listener) { mListener = listener; } void call() { mListener->call(); } private: test *mListener; }; Java:interface 实现 class test { public interface listener{ void call(); } private listener mListener; public void setListener(listener listen) { mListener = listen; } public void call() { mListener.call(); } } class child implements test.listener { public void call() { System.out.println("child call"); } } class demo { private public void static main() { child b = new child(); test a = new test(); a.setListener(b); a.call(); } }

回调函数的作用

比较典型的应用就是通知UI更新某些元素 1. 通过socket接收到消息了 更新UI的内容 2. 触发某些预先设定的动作 比如按键事件

Object-C的实现

1. Object-C的protocol关键字 protocol很类似java中的interface 都是抽象出接口 不同之处则在于java中接口必须全部被实现 oc中则可以通过@require和 @optional(不必实现)来控制接口是否实现. 2. id<xxx> 实现xxx接口的对象 这类似于java的 public interface test {...}; private test mListener;

示例代码

header.h: @protocol listener -(void) call; @end @interface header : NSObject { id<listener> mListener; } -(void) setListener:(id<listener>) listen; -(void) call; @end header.m: #import "header.h" @implementation header -(void) setListener: (id<listener>) listen { mListener = listen; } -(void) call { [mListener call]; } @end test.h: @interface test : NSObject <header> @end test.m: @implementation test -(void) call { NSLog(@"test call"); } @end main.m: int main() { test *a = [[test alloc] init]; header *b = [[header alloc] init]; [b setListener:b]; [b call] }
转载请注明原文地址: https://www.6miu.com/read-2632041.html

最新回复(0)