Objective-C该Protocol

it2025-08-23  20

Objective-C该Protocol

Protocol

  简单来说就是一系列方法的列表,当中声明的方法能够被不论什么类实现,这样的模式一般称为(delegation)模式

在iOS中和OS X中,Apple採用了大量的代理模式来实现MVC中的View(UI控件)和Controller(控制器)

以下举个样例

声明一个Button类和Buttonlisterner类

在Button.h文件中

#import <Foundation/Foundation.h> //类声明 @class Button; //<>代表实现某个协议,NSObject为做根本的协议 //ButtonDelegate为协议的名称 @protocol ButtonDelegate<NSObject> -(void)onClick:(Button*)but; @end @interface Button : NSObject //nonatomic不须要多线程管理,delegate是button的监听器 @property(nonatomic,retain) id<ButtonDelegate> delegate; -(void)Click; @end

在Button.m文件中

#import "Button.h" @implementation Button //-(void)dealloc{ // [super dealloc]; //} -(void)Click{ NSLog(@"Clickbutton被点击了。。。

"); //假设有onClick:的方法则调用此方法 if ([_delegate respondsToSelector:@selector(onClick:)]) { //而且告诉监听器哪个button被点击了 [_delegate onClick:self]; } } @end

在Buttonlisterner.h文件中

#import <Foundation/Foundation.h> #import "Button.h" //对协议提前声明。跟@class的作用是一样的 @protocol ButtonDelegate; @interface Buttonlisterner : NSObject<ButtonDelegate> @end

在Buttonlisterner.m文件中

#import "Buttonlisterner.h" #import "Button.h" @implementation Buttonlisterner -(void)onClick:(Button *)but { NSLog(@"onClick..."); } @end

main.m

int main(int argc, const char * argv[]) { @autoreleasepool { Button* button = [[Button alloc]init]; Buttonlisterner* listenter = [[Buttonlisterner alloc]init]; button.delegate=listenter; [button Click]; } return 0; }

转载于:https://www.cnblogs.com/bhlsheji/p/4600211.html

最新回复(0)