黑马程序员——category和protocol协议

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

category的使用

给类动态的 添加一些新的方法  可以保证原有的类的数据不变 功能增加时再加以扩展

这样就不需创建子类 用最简单的方式实现类的方法 模块化 把不同的类方法支配到分类 文件里

例:

#import <Founation\Founation.h> //创建一个类

@interface Student:NSObject

-(void)study;

@end

#import "Student.h"

@implementation Student

-(void)study{

NSLog(@"hard study ");

}

@synthesize age=_age;

@end

//为Student类动态的添加新方法

#import "Student.h" // 导入student.h .不能使用@class 以防止扩充后的方法名与被扩充的类方法名重复

@interface Student (Test)

-(void)sport;

@end

#import "Student+Test.h"

@implementation

-(void)sport{

NSLog(@"basketball and football");

}

@end

#import "Student.m"

#import "Student+Test.m" //要导入分类方法的.h文件

void main(){

@aotoreleasepool{

Student *stu=[[[Student alloc] init] autorelease];

[stu study];

[stu sport];//成功的调用了扩充的方法

}

}

打印结果:

hard studey

basketball and football

使用场景 : 当 一个项目 需求变更 时又不想改变原始 类的架构  项目规模大时 使用分类更有效的维护和管理

@protocol 的使用

就是代理 模式  一系列方法的列表 其中声明的方法可以被实任何类所实现

#import <Foundation/Foundation.h>

@class Button;

@protocol ButtonDelegate <NSObject> //定义一个协议 并遵守了NSObject协议

-(void)onClick:(Button *) btn;//实现协议 中的方法

@end

@interface Button:NSObject

@property(nonatomic,retain) id<ButtonDelegate> delege; //被代理类

-(void)click; //打击按钮 通知自己被点击了

@end

#import "Button.h"

@implementation Button

-(void)click{

[_delegate onClick:self];

}

-(void)dealloc{

[_delegate release];

[super dealloc];

}

@end

// 进来的用户

#import <Foundation/Foundation.h>

@protocol ButtonDelegate;

@interface myLinter :NSObject<ButtonDelegate>

//用户遵守协议

@end

#import "myLinter.h"

#import "Button.h"

@implementation  myLinter //实现了协议

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

NSLog(@"我被打击了 %@",btn);//点击了按钮

}

@end

#import <Foundation/Foundation.h>

#import "Bootton.m"

#import "myLinter.m"

void main(){

@autoreleasepool{

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

myLinter *lin=[[[myLinter alloc] init] autorelease];

[button onClik:button];//打击了按钮 被通知

}

}

运行结果:

我被打击了

时间: 2024-08-09 02:18:36

黑马程序员——category和protocol协议的相关文章

黑马程序员--protocol(协议)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 可以用来声明一大堆方法(不能声明成员变量) 只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明 只要父类遵守了某个协议,就相当于子类也遵守了 //定义一个名叫MyProtocol的协议 MyProtocol.h @protocol MyProtocol <NSObject> @required//要求实现,不识闲会发出警告,如果什么都不写,默认是@required -(void)

黑马程序员— block、protocol和Foundation

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 上一章我们学习了OC内存管理的相关知识,了解了OC程序在运行中对象及变量是如何释放以达到不占用内存的效果.本章我们来学习OC的block,protocol协议和Foundation框架. 第一讲     block 1. block简介 block封装了一段代码,可以在任何时候执行 block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值. 苹果官方建议尽量多用block.

黑马程序员 block,protocol

#import <Foundation/Foundation.h> // 利用typedef创建block typedef int (^MyBlock) (int,int); // <>表示遵守协议 @protocol MyProtocol <NSObejct> /* 1.reqiured:要求实现方法,不实现方法编译器会发出警告 2.optional:不要求实现方法 3.默认情况下为reqiured 4.协议之间可以相互遵守,一个协议可以遵守多个协议<....,

&lt;&lt;黑马程序员&gt;&gt;category分类的使用

分类 分类的作用:在不改变原来类的基础上,可以给类增加一些方法. 使用注意 : ①  分类只能增加方法,不可以增加成员变量                 ②  分类的方法在实现中可以访问成员变量,不过成员变量必须手动实现.                 ③  分类可以从新实现原来类的方法,但是会覆盖原来类的方法,导致原来类的方法不可以使用.                 ④   方法调用的优先级:分类(最后参与编译的分类) > 父类,如果几个分类中都实现了原来类中的一个方法,再调用次方法时

黑马程序员_ 利用oc的协议实现代理模式

先说下代理模式是什么吧 定义: 为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象 而代理对象可以在客户端和目标对象之间起到中介的作用. 在看过李明杰老师的课程后,我对代理模式有了最初步的理解,虽然还很浅显 但是也明白了代理模式的 一些作用跟用法.首先使用代理模式可以降低耦合度.大大的增强了代码的弹性. 举个例子,小明想看电影,但是没时间买票 于是就拜托小强去买票 最简单的方式就是 建立一个person类(小明) 一个agent类(代理类) ag

黑马程序员-OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数

1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如下 // 声明 @interface  类名  (分类名称) @end // 实现 @implementation 类名 (分类名称) @end 2:分类的好处,当一个类比较庞大时,不同的部分可以放到不同的分类中,也方便团队中类的开发: 3:分类使用注意: a:分类不能增加成员变量,只能对原类增加方

黑马程序员——网络编程篇

------- android培训.java培训.期待与您交流! ---------- 概述   1.网络模型        (1).OSI参考模型        (2).TCP/IP参考模型   2.网络通讯要素         (1).IP地址        (2).端口号         (3).传输协议    3.过程        1,找到对方IP. 2,数据要发送到对方指定的应用程序上.为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识. 为了方便称呼这个数据,叫做端口(逻

黑马程序员_Java网络编程

1,IP地址和InetAddress IP地址是互联网上每台计算机都有的自己的标记,IP地址分为5类,A类保留给政府,B类给中等规模的公司,C类给任何需要的人,D类用于组播,E类用于实验. A类  1.0.0.1-126.255.255.254  B类  128.0.0.1-191.255.255.254   C类  192.0.0.1-223.255.255.254  D类 244.0.0.1-239.255.255.254 E类 240.0.0.1-255.255.255.254 在以后开发

黑马程序员——Java网络编程之UDP传输

网络编程 网络模型 通讯要素:InetAddress(对象):ip地址,网络中设备的标识,不可记忆,可用主机名,本地回环地址:127.0.0.1主机名localhost 端口号 传输协议:UDP,将数据的源及目的封装成数据包中,不需要建立连接,每个数据包的大小限制在64K内,无连接,是不可靠协议,不需要建立连接,速度快.力求速度,不求数据的准确性.比如聊天软件,网络会议. TCP:建立连接,形成传输数据的通道,在连接中进行大数据量传输,通过三次握手完成连接,是可靠协议,必须建立连接效率稍低. S