oc-类目、延展、协议
-----------------------------------------------Category--------------------------------------
类目 是在原有类的基础上 添加方法,在使用的时候只需要用原有类实例化出来的对象,调用即可。在类目里面 不可以添加变量、属性,只能添加方法。
1.实际开发在什么情况下使用呢?
答:扩展已经封装好的类(不希望再改变原有类)这种情况下只能用 类目
在团队里面 分工开发一个模块的时候 使用Category
2.不要覆盖原有类的方法,这样会引起super消息的断裂,因为类目的中的方法具有更高的优先级。
3.类目 和 继承 有什么不同
继承:可以扩展父类的方法,可以添加实例变量,属性。
类目:可以扩展原有类的方法;不可以可以添加实例变量,属性。
4.扩展方法的调用方式
继承:用子类的对象,调用扩展方法。
类目:依然使用原有类的对象调用。
5.新建Object -C.file文件 会出现原有类+(你所建的扩展内容的名字);
例:扩展数组
代码:
在.h文件中声明你所需要扩展的方法:
#import <Foundation/Foundation.h>
@interface NSArray (Arr)
-(NSString *)link;
@end
在.m文件中实现你所需要扩展的方法:
#import "NSArray+Arr.h"
@implementation NSArray (Arr)
-(NSString *)link{
NSMutableString *str = [[NSMutableString alloc]init];
for (id n in self)
[str appendString:n];
return str;
}
@end
在主文件中调用:
NSArray *y = @[@“我爱中国”,@"我爱oc",@"我爱青山绿水"];
NSLog(@"%@",[y link ]);
输出的结果为:
我爱中国我爱oc我爱青山绿水
--------------------------------------------Extension---------------------------------------
类的延展 就是在类中添加私有方法、变量,延展中的声明的方法在类本身的@interfance 类名 ()和它对应的@end之间实现
类有时需要方法只有自己可见,这时我们可以通过延展的方式定义类的私有方法
但是这种方式和之前定义的@private的区别
两者的区别就是@private在.h文件中定义的,一个延展是在.m文件中定义的
如果是开源的话,一般是开放.h文件
如果是闭源的话,一般只开放.m文件
注意:私有方法,只是在.m文件中定义了,没有在.h文件中声明,一般是在类中自己使用的
创建延展有两种方式:
1.新建Object-C.file——>extension,出现oo.h文件
2.直接在类的.m文件中,在@implementation上面 输入
@interface see()
@end
例:
新建一个Person类。在其.m文件中:
//添加一个私有的变量和方法。
#import “Penson.h"
@interface Penson()
{
NSString *name;
}
-(void)name;
@end
@implementation Penson
-(void)name{
name = @"人物";
NSLog(@"%@你创建成功了",name);
}
-(void)impli:(NSString *)k{
NSLog(@"%@",k);
[self name];
}
@end
Protol------------------------------Protocol-------------------------------------------
1.协议可以被任何类实现的方法,协议本身不是类,它是定义了一个其他类可以实现的接口。
协议是 只声明 不实现
(没有实现的类目 又叫 非正式协议。
因为一般情况下类都从NSObject继承
)
2.非正式协议是以圆括号()表示,而正式协议是以<>来表示的 协议是用尖括号来引入
在哪一个类里面导入了协议 就在哪一个类里面 实现这个协议方法
// 默认的都是required强制实现的方法,不实现就报错。
// 选择实现的 @optional 可以实现的 可以不实现。
新建协议后,只会出现一个.h文件
@protocol xieyi <NSObject>
-(void)fangfa;
@optional
-(void)fangfa1;
@end
在某一个类中引入xieyi.h这个协议后。
-(void)fangfa;这个方法必须要实现,不然就报错
而-(void)fangfa1;加了@optional 后,可以选择实现或者不实现。不实现也不会报错。
注意:如果在类中要引入多个协议 可以,号隔开@interface Person : NSObject<xixieyi,shangke,zixi,zongjie>
oc-类目、延展、协议的更多相关文章
- Objective-C学习笔记类目、协议
不是所有的方法都可以被覆盖的!比如:intValue就不能被覆盖!! 原因正在查找中! 别人的电脑上却可以! 类目.h件 #import <Foundation/Foundation.h> ...
- objective-c 类目(Category)和延展(Extension)
类目的基本概念: 如果有封装好的一个类,随着程序功能的增加,需要在类中增加一个方法,那我们就不必在那个类中做修改或者再定义一个子类,只需要在用到那个方法时添加一个该类的类目即可. 1.在类目定义的方法 ...
- OC中协议, 类目, 时间, 延展, 属性
只有继承和协议需要引IMPORT "头文件"; 必须接受marryprotocol协议, id<marryprotocol>基于类型的限定, 才能给实例变量赋值 @pr ...
- OC 中 类目、延展和协议
Category : 也叫分类,类目. *是 为没有源代码的类 扩充功能 *扩充的功能会成为原有类的一部分,可以通过原有类或者原有类的对象直接调用,并且可继承 *该方法只能扩充方法,不能扩充实例变量 ...
- Objective-C中的类目,延展,协议
Objective-C中的类目(Category),延展(Extension),协议(Protocol)这些名词看起来挺牛的,瞬间感觉OC好高大上.在其他OOP语言中就没见过这些名词,刚看到这三个名词 ...
- Object-C里的类目,延展,协议
1.类目 类目就是为已存在的类添加新的方法.但是不能添加实例变量.比如系统的类,我们看不到他的.m文件,所以没有办法用直接添加方法的方式去实现. @interface NSMutableArray ( ...
- iOS -类目,延展,协议
1.类目 类目就是为已存在的类添加新的方法.但是不能添加实例变量.比如系统的类,我们看不到他的.m文件,所以没有办法用直接添加方法的方式去实现. @interface NSMutableArray ( ...
- object-c中的类目,延展,协议
协议 协议只有方法的声明(类似于其他编程语言的接口) 协议相当于大家都所遵循的 关键字 @protocol 协议名 <所遵循的协议> 默认NSObject @end @pr ...
- 寒假 OC-代理,类目,内存,协议,延展,数组,字典,集合
OC04字符串博客:1.http://www.cnblogs.com/heyonggang/p/3452556.html (字符串常用方法)2.http://blog.sina.com.cn/s/b ...
- OC: 类的扩展、类的延展、协议、 NSDate
NSDateFormatter 指定⽇日期格式: NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; [formatter ...
随机推荐
- LeetCode OJ Symmetric Tree 判断是否为对称树(AC代码)
思路: 主要判断左子树与右子树. 在判断左时,循环下去肯定会到达叶子结点中最左边的结点与最右边的结点比较. 到了这一步因为他们都没有左(右)子树了,所以得开始判断这两个结点的右(左)子树了. 当某 ...
- 【Sublime Text 3】
- Chorme dev tools小技巧
1.快速稳健转换:打开DevTools,按下Ctrl+P来快速寻找和打开你工程中的任意文件. 2.在源代码中搜索:打开DevTools,按下Ctrl+Shift+F,即可在所有已加载文件中查找一个特定 ...
- C函数及指针学习2
1.break 永久终止循环,continue 结束当前循环 2.switch 每个case标签要有唯一值,(且为常量或常量表达式) 不加break 时执行流会贯穿整个case 标签 3 赋值操作符 ...
- TinyXML2读取和创建XML文件 分类: C/C++ 2015-03-14 13:29 94人阅读 评论(0) 收藏
TinyXML2是simple.small.efficient C++ XML文件解析库!方便易于使用,是对TinyXML的升级改写!源码见本人上传到CSDN的TinyXML2.rar资源:http: ...
- python study - 正则表达式
第 7 章 正则表达式 7.1. 概览 7.2. 个案研究:街道地址 7.3. 个案研究:罗马字母 7.3.1. 校验千位数 7.3.2. 校验百位数 7.4. 使用 {n,m} 语法 7.4.1. ...
- Linux驱动设计—— 中断与时钟
中断和时钟技术可以提升驱动程序的效率 中断 中断在Linux中的实现 通常情况下,一个驱动程序只需要申请中断,并添加中断处理函数就可以了,中断的到达和中断函数的调用都是内核实现框架完成的.所以程序员只 ...
- linux下crontab定时执行本地脚本和定时访问指定url
https://my.oschina.net/u/2487410/blog/683308 使用linux curl命令讲解:http://www.linuxdiyf.com/linux/2800.ht ...
- 如何用Transformer+从PDF文档编辑数据
ABBYY PDF Transformer+是一款可创建.编辑.添加注释及将PDF文件转换为其他可编辑格式的通用工具,可使用该软件从PDF文档编辑机密信息,然后再发布它们,文本和图像均可编辑,本文将为 ...
- 对OCR文字识别软件的扫描选项怎么设置
说到OCR文字识别软件,越来越多的人选择使用ABBYY FineReader识别和转换文档,然而并不是每个人都知道转换质量取决于源图像的质量和所选的扫描选项,今天就给大家普及一下这方面的知识. ABB ...