4 9.OC15-Protocol
Protocol
1)、简单来说就是一系列方法的列表,其中声明的方法可以被任何类实现。这种模式一般称为代理(delegation)模式。
2)、在IOS和OS X开发中,Apple采用了大量的代理模式来实现MVC中view(UI控件)和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中的延展(Extension)使用详解** 在Objective-C(简称OC)编程中,延展是一种强大的特性,它允许我们为已有类添加私有方法、属性或者分类,而无需创建新的子类。延展通常用于隐藏实现细节,提供类的内部逻辑,...
1. **Objective-C基础**:Objective-C是C语言的超集,引入了Smalltalk式的面向对象特性,如消息传递、类别(Category)、协议(Protocol)等。了解这些基础知识是理解OC-图片浏览器的前提。 2. **UIImage与...
【标题】"预科班oc_代码_及ppt_文档相关资料" 提供的是与iOS开发相关的学习资源,特别是Objective-C这门编程语言的基础知识。Objective-C是苹果平台上的主要编程语言,用于开发iOS和macOS的应用程序。在这个资料包中...
例如,使用IBOutlet和IBAction连接视图和控制器,使用协议(Protocol)和代理(Delegate)模式在控制器之间进行通信,以及利用KVO(Key-Value Observing)监听模型的变化。 **总结** "MVC-OC-DEMO"是一个用...
在OC中,协议(Protocol)定义了一组方法,任何类都可以选择遵循这个协议。代理协议通常包含那些代理对象需要实现的方法,例如传递消息、接收事件等。例如,一个常见的代理协议可能是`UITableViewDataSource`,它...
4. **具体实现**: 我们可以创建两个子类,比如`UIButtonFactory`和`UIBarButtonItemFactory`,它们都继承自`KeyFactory`。每个子类重写工厂方法,根据传入的类型返回相应的按键对象,例如`UIButton *button = ...
在iOS开发中,页面间的传值是日常开发中不可或缺的一部分,尤其对于Objective-C(简称OC)的开发者来说,掌握各种传值方式能显著提高代码的灵活性和可维护性。本资料"ios-iOS-OC-页面传值的5种方法.zip"主要探讨了五...
在iOS应用开发中,Objective-C(OC)和Swift是两种主要的编程语言。Objective-C作为Apple的早期开发语言,有着深厚的社区支持和丰富的库资源,而Swift是Apple后来推出的新一代编程语言,以其简洁的语法和强大的功能...
在Objective-C(OC)中,协议(@protocol)主要用于定义对象间交互的接口,它们类似于接口,但不提供默认实现。然而,在Swift中,我们可以为协议提供默认实现,使得遵循该协议的类无需手动实现所有方法。这篇教程将...
在iOS开发中,Objective-C(简称OC)是一种广泛使用的编程语言。工厂模式是设计模式中的一种,它在软件工程中扮演着重要的角色,特别是在处理不同类的实例化时。本篇我们将深入探讨OC中的工厂模式及其在处理不同通知...
4. **适配支付接口的具体应用**: - 当我们需要集成多种支付方式,如支付宝、微信支付等,每种支付方式都有自己的API和接口。适配器模式可以让我们创建一个统一的支付接口,每个支付方式对应一个适配器类,这样在...
在iOS和macOS开发中,Apple提供了两种主要的编程语言:Objective-C(简称OC)和Swift。自从2014年Swift发布以来,它迅速获得了开发者们的青睐,但Objective-C作为苹果生态系统的老牌语言,仍然在很多现有项目中占据...
《OC疯狂讲义》是一份全面且深入的学习Objective-C(简称OC)语言的教程资料,分为上、下两部分,以PDF格式呈现。OC作为苹果公司开发的编程语言,是iOS和Mac OS X应用程序开发的核心工具,其语法特性深受C语言的影响...
- 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 ...
为了增加扩展性,我们可以引入协议(Protocol)和委托设计模式(Delegate)。创建一个自定义的TabBarDelegate协议,其中包含一些回调方法,比如`- (void)tabBar:(CustomTabBar *)tabBar didSelectItemAtIndex:...
- Swift协议可以被OC遵循,只需添加`@objc`关键字,如`@objc protocol MyProtocol`。 - OC协议也可以被Swift遵循,Swift会自动为OC协议生成对应的类型别名。 6. **属性和方法的互访** - OC的实例变量和方法可以...
- 定义Category或Protocol,暴露OC接口给Swift使用。 - 使用Bridge Header,声明Swift能访问的OC类和方法。 通过以上步骤,我们可以快速地搭建一个基本的App框架。当然,具体实现可能因项目需求而异,但这些基础...
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.66)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = oral) ) ) ``` - 其中,“oral”为别名,可根据实际需求自定义;`HOST`为数据库...
Objective-C(简称OC)是Apple开发的面向对象的编程语言,它在C语言的基础上增加了面向对象的特性。在iOS和macOS应用开发中,Objective-C扮演着核心角色。"objc-runtime-master.zip"包含了Objective-C运行时库的源...
### iOS面试题-OC部分详解 #### 1. Objective-C是否支持多继承?能否实现多个接口?Category是什么?重写类的方式是用继承还是用分类? - **Objective-C多继承:**Objective-C不直接支持多继承,即一个类不能直接...