`
JavaZhuang
  • 浏览: 10299 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

4 9.OC15-Protocol

    博客分类:
  • IOS
 
阅读更多

4 9.OC15-Protocol

Protocol

1)、简单来说就是一系列方法的列表,其中声明的方法可以被任何类实现。这种模式一般称为代理(delegation)模式。

2)、在IOSOS  X开发中,Apple采用了大量的代理模式来实现MVCviewUI控件)和Controller(控制器)的解耦。

 

Main.m

 //

//  main.m

//  OC10-内存管理2-set方法的内存管理

//

//  Created by qwz on 13-12-9.

//  Copyright (c) 2013 renhe. All rights reserved.

//

 

#import <Foundation/Foundation.h>

#import "Button.h"

#import "ButtonListener.h"

#import "MyListener.h"

 

 

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

{

 

    @autoreleasepool {

        //初始化一个按钮

        Button *button = [[[Button alloc] init] autorelease];

        //初始化一个按钮的监听器

        //ButtonListener *listener = [[[ButtonListener alloc] init] autorelease];

        MyListener *listener = [[[MyListener alloc] init] autorelease];

        

        //设置按钮的监听器

        button.delegate = listener;

        

        //点击按钮

        [button click];

        

        Button *button2 = [[[Button alloc] init] autorelease];

        button2.delegate = listener;

        //点击button2

        [button2 click];

    }

    return 0;

}

 

Button.h

 //

//  Button.h

//  OC10-内存管理2-set方法的内存管理

//

//  Created by qwz on 13-12-10.

//  Copyright (c) 2013 renhe. All rights reserved.

//

 

#import <Foundation/Foundation.h>

@classButton;

 

// <>代表实现某个协议

@protocol ButtonDelegate <NSObject>

- (void)onClick:(Button *)btn;

@end

 

@interface Button : NSObject

 

// delegate 就是按钮的监听器

@property (nonatomic, retain) id<ButtonDelegate> delegate;

 

// 点击按钮

- (void)click;

 

@end

 

 

Button.m

 //

//  Button.m

//  OC10-内存管理2-set方法的内存管理

//

//  Created by qwz on 13-12-10.

//  Copyright (c) 2013 renhe. All rights reserved.

//

 

#import "Button.h"

 

@implementation Button

 

- (void)dealloc{

    [_delegaterelease];

    [super dealloc];

}

 

- (void) click{

    //如果delegate实现了onClick:这个方法

    if( [_delegate respondsToSelector:@selector(onClick:)]){

        //按钮被点击了,就应该通知监听器,并且告诉监听器哪个按钮被点击了

        [_delegate onClick:self];

    }else{

        NSLog(@"监听器并没有实现onClick:方法");

    }

}

 

@end

 

ButtonListener.h

 //

//  ButtonListener.h

//  OC10-内存管理2-set方法的内存管理

//

//  Created by liuyes on 13-12-10.

//  Copyright (c) 2013 renhe. All rights reserved.

//

 

#import <Foundation/Foundation.h>

 

//#import "Button.h"

//对协议进行提前声明,跟@class的用途是一致

@protocolButtonDelegate;

 

@interface ButtonListener : NSObject<ButtonDelegate>

 

@end

 

ButtonListener.m

 //

//  ButtonListener.m

//  OC10-内存管理2-set方法的内存管理

//

//  Created by liuyes on 13-12-10.

//  Copyright (c) 2013 renhe. All rights reserved.

//

#import "ButtonListener.h"

#import "Button.h"

 

@implementation ButtonListener

 

- (void)onClick{

    NSLog(@"ButtonListener已经监听到按钮被点击了");

}

 

@end

 

MyListener.h

 //

//  MyListener.h

//  OC10-内存管理2-set方法的内存管理

//

//  Created by liuyes on 13-12-10.

//  Copyright (c) 2013 renhe. All rights reserved.

//

 

#import <Foundation/Foundation.h>

//#import "Button.h"

@protocolButtonDelegate;

 

@interface MyListener : NSObject <ButtonDelegate>

 

@end

 

MyListener.m

 //

//  MyListener.m

//  OC10-内存管理2-set方法的内存管理

//

//  Created by liuyes on 13-12-10.

//  Copyright (c) 2013 renhe. All rights reserved.

//

 

#import "MyListener.h"

#import "Button.h"

 

@implementation MyListener

 

- (void)onClick{

    NSLog(@"MyListener已经监听到按钮被点击了");

}

 

- (void)onClick:(Button *)btn{

    NSLog(@"MyListener已经监听到按钮-%@被点击了", btn);

}

 

@end

 

 

分享到:
评论

相关推荐

    我的博客OC第七天(OC中延展(protocol)的使用步骤)

    **OC中的延展(Extension)使用详解** 在Objective-C(简称OC)编程中,延展是一种强大的特性,它允许我们为已有类添加私有方法、属性或者分类,而无需创建新的子类。延展通常用于隐藏实现细节,提供类的内部逻辑,...

    OC-图片浏览器,OC-图片浏览器

    1. **Objective-C基础**:Objective-C是C语言的超集,引入了Smalltalk式的面向对象特性,如消息传递、类别(Category)、协议(Protocol)等。了解这些基础知识是理解OC-图片浏览器的前提。 2. **UIImage与...

    预科班oc_代码_及ppt_文档相关资料

    【标题】"预科班oc_代码_及ppt_文档相关资料" 提供的是与iOS开发相关的学习资源,特别是Objective-C这门编程语言的基础知识。Objective-C是苹果平台上的主要编程语言,用于开发iOS和macOS的应用程序。在这个资料包中...

    MVC-OC-DEMO

    例如,使用IBOutlet和IBAction连接视图和控制器,使用协议(Protocol)和代理(Delegate)模式在控制器之间进行通信,以及利用KVO(Key-Value Observing)监听模型的变化。 **总结** "MVC-OC-DEMO"是一个用...

    oc 代理的用法.zip

    在OC中,协议(Protocol)定义了一组方法,任何类都可以选择遵循这个协议。代理协议通常包含那些代理对象需要实现的方法,例如传递消息、接收事件等。例如,一个常见的代理协议可能是`UITableViewDataSource`,它...

    OC-工厂模式-创建不同按键

    4. **具体实现**: 我们可以创建两个子类,比如`UIButtonFactory`和`UIBarButtonItemFactory`,它们都继承自`KeyFactory`。每个子类重写工厂方法,根据传入的类型返回相应的按键对象,例如`UIButton *button = ...

    ios-iOS-OC-页面传值的5种方法.zip

    在iOS开发中,页面间的传值是日常开发中不可或缺的一部分,尤其对于Objective-C(简称OC)的开发者来说,掌握各种传值方式能显著提高代码的灵活性和可维护性。本资料"ios-iOS-OC-页面传值的5种方法.zip"主要探讨了五...

    OC调用swift的DEMO

    在iOS应用开发中,Objective-C(OC)和Swift是两种主要的编程语言。Objective-C作为Apple的早期开发语言,有着深厚的社区支持和丰富的库资源,而Swift是Apple后来推出的新一代编程语言,以其简洁的语法和强大的功能...

    让oc像swift那样给@protocol协议添加方法的默认实现教程加demo,

    在Objective-C(OC)中,协议(@protocol)主要用于定义对象间交互的接口,它们类似于接口,但不提供默认实现。然而,在Swift中,我们可以为协议提供默认实现,使得遵循该协议的类无需手动实现所有方法。这篇教程将...

    OC-工厂模式-处理不同通知

    在iOS开发中,Objective-C(简称OC)是一种广泛使用的编程语言。工厂模式是设计模式中的一种,它在软件工程中扮演着重要的角色,特别是在处理不同类的实例化时。本篇我们将深入探讨OC中的工厂模式及其在处理不同通知...

    OC-适配器模式-适配支付接口

    4. **适配支付接口的具体应用**: - 当我们需要集成多种支付方式,如支付宝、微信支付等,每种支付方式都有自己的API和接口。适配器模式可以让我们创建一个统一的支付接口,每个支付方式对应一个适配器类,这样在...

    Swift和OC代码的相互使用

    在iOS和macOS开发中,Apple提供了两种主要的编程语言:Objective-C(简称OC)和Swift。自从2014年Swift发布以来,它迅速获得了开发者们的青睐,但Objective-C作为苹果生态系统的老牌语言,仍然在很多现有项目中占据...

    oc疯狂讲义

    《OC疯狂讲义》是一份全面且深入的学习Objective-C(简称OC)语言的教程资料,分为上、下两部分,以PDF格式呈现。OC作为苹果公司开发的编程语言,是iOS和Mac OS X应用程序开发的核心工具,其语法特性深受C语言的影响...

    全国计算机等级考试四级网络工程师复习提纲(1~5章).pdf

    - OC-192 (Optical Carrier level 192, 9.953 Gbps) - 802.11a/b/g (Wi-Fi Standards) - RPR (Resilient Packet Ring) 4. 网络接入与调制解调技术 - ADSL (Asymmetric Digital Subscriber Line) - HDSL (High ...

    OC-高度自定义封装tabbar框架

    为了增加扩展性,我们可以引入协议(Protocol)和委托设计模式(Delegate)。创建一个自定义的TabBarDelegate协议,其中包含一些回调方法,比如`- (void)tabBar:(CustomTabBar *)tabBar didSelectItemAtIndex:...

    OC与Swift混编

    - Swift协议可以被OC遵循,只需添加`@objc`关键字,如`@objc protocol MyProtocol`。 - OC协议也可以被Swift遵循,Swift会自动为OC协议生成对应的类型别名。 6. **属性和方法的互访** - OC的实例变量和方法可以...

    swift-十分钟搭建App框架OC

    - 定义Category或Protocol,暴露OC接口给Swift使用。 - 使用Bridge Header,声明Swift能访问的OC类和方法。 通过以上步骤,我们可以快速地搭建一个基本的App框架。当然,具体实现可能因项目需求而异,但这些基础...

    Window下Python远程连接oracle

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.66)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = oral) ) ) ``` - 其中,“oral”为别名,可根据实际需求自定义;`HOST`为数据库...

    objc-runtime-master.zip

    Objective-C(简称OC)是Apple开发的面向对象的编程语言,它在C语言的基础上增加了面向对象的特性。在iOS和macOS应用开发中,Objective-C扮演着核心角色。"objc-runtime-master.zip"包含了Objective-C运行时库的源...

    iOS面试题-OC部分

    ### iOS面试题-OC部分详解 #### 1. Objective-C是否支持多继承?能否实现多个接口?Category是什么?重写类的方式是用继承还是用分类? - **Objective-C多继承:**Objective-C不直接支持多继承,即一个类不能直接...

Global site tag (gtag.js) - Google Analytics