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;
}
时间: 2024-11-06 03:37:48

Objective-C该Protocol的相关文章

Objective -C NSDate、Category &nbsp; 、Extension、Protocol

NSDate的使用 NSDate是Cocoa中用于处理日期和时间的基础类,封装类某一给定的时刻,具体的日期,时间和时区 使用+date方法获取当前日期和时间 例如  :NSDate*nowDate = [NSDate date]: 注意,,NSLog(@"%@",nowDate): 无论你是哪个时区的时间,打印时间,打印时总是打印对应的0时区时间 NSTimeinterval NSTimeInterval(即double类型) 用以表示以秒为单位的时间间隔 可以使用-initWithT

Objective C Protocol implementation

protocol 类似于接口,可以实现函数的回调 @protocol MyDelegate<NSObject> -(void)myCallbackFunction; @end //Caller 添加一个delegate 的property: //.h文件 @property (nonatomic,weak) id <MyDelegate> mDelegate; //caller的函数中就可以调用 //.m文件 @synthesize mDelegate; [self.mDelega

objective c, protocol

OC中协议类似于java中的接口,在多个类具有类似的方法时可以将这些方法定义到protocol中,然后各个类分别实现protocol中的各个方法. 例:有两个类Square和Circle, 定义一个protocol来获得对象的面积, Square和Circle只需实现protocol中的-(int)area方法即可. 定义协议 @protocol AreaProtocol<NSObject> - (int) area; @end //square类 @interface Square:NSOb

objective c, category 和 protocol 中添加property

property的本质是实例变量 + getter 和 setter 方法 category和protocol可以添加方法 category 和 protocol中可以添加@property 关键字 所以,在protocol中添加property时,其实就是添加了 getter 和 setter 方法,在实现这个protocol的类中,我们要自己手动添加实例变量 例: @synthesize name = _name; //此行代码即添加了实例变量及实现了protocol中属性的getter.s

Objective中的协议(Protocol)

作用: 专门用来声明一大堆方法. (不能声明属性,也不能实现方法,只能用来写方法的声明). 只要某个类遵守了这个协议.就相当于拥有这个协议中的所有的方法声明. 协议的声明: @protocol 协议名称 <NSObject> //方法的声明; @end 新建1个协议的方式. NewFile OC-File - protocol 协议的文件名: .h 并且只有1个.h文件. 在协议中,只能用来声明方法,协议的作用:就是专门用来写方法声明的. 类遵守协议: 如果想要让1个类,拥有协议中定义的所有的

Objective-C( protocol协议)

protocol 协议 protocol:用来声明方法 1.协议的定义 @protocol 协议名称 <NSObject> // 方法声明列表.... @end 2.如何遵守协议 1> 类遵守协议 @interface 类名 : 父类名 <协议名称1, 协议名称2> @end 2> 协议遵守协议 @protocol 协议名称 <其他协议名称1, 其他协议名称2> @end 3.协议中方法声明的关键字 1> @required (默认) 要求实现,如果没

OC中protocol、category和继承的区别

利用继承,多态是一个很好的保持"对扩展开放.对更改封闭"(OCP)的办法,也是最常见的一种方法.Objective C还支持另外两种语法来支持OCP:Protocol和Category.Protocol只能定义一套接口,而不能提供实现,变相的也是一种Abstract class的实现方式(oc 语法上本身不支持抽象基类).Category可以为类提供额外的接口和实现.那么到底三者(继承, Protocol,Category)在使用上到底有什么本质的区别呢?在我看来,protocol的作

Lab - Hot Standby Router Protocol

Topology Objective Configure inter-VLAN routing with HSRP to provide redundant, fault-tolerant routing to the internal network. Background Hot Standby Router Protocol (HSRP) is a Cisco-proprietary redundancy protocol for establishing a fault-tolerant

iOS完全自学手册——[三]Objective-C语言速成,利用Objective-C创建自己的对象

1.前言 上一篇已经介绍了App Delegate.View Controller的基本概念,除此之外,分别利用storyboard和纯代码创建了第一个Xcode的工程,并对不同方式搭建项目进行了比较.这一篇文章,我准备为大家介绍一下奇葩的Objective-C语言的语法和使用.这篇文章主要讲Objective-C的理论概念. 2.学习目标 2.1 Objective-C语言面向对象的特性与其他语言(C++)类比学习,声明定义一个MyObject类,并创建这个类的实例. 2.2 Objectiv

iOS开发核心语言Objective C —— 全部知识点总结

本分享是面向有意向从事iOS开发的伙伴及苹果产品的发烧友,亦或是已经从事了iOS的开发人员,想进一步提升者.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基础.建议您先翻阅我之前分享的iOS开发分分钟搞定C语言系列,然后在開始Objective C语言的学习,假设您遇到问题也能够与我探讨.另外将无偿分享自己整理出来的大概400G iOS学习视频及学习资料,都是干货哦.能够新浪微博私信?关注极客James,期待与您的共同学习和探讨! ! 由于时间有限,每