黑马程序员——OC基础---分类(Category)、非正式协议及分类延展
来源:互联网 发布:淘宝app我是商家 编辑:程序博客网 时间:2024/05/21 11:04
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
分类定义:
一些方法的声明和实现(可被子类继承)
作用:
给类增加新方法(只能增加方法,不能增加实例变量)
类别的使用步骤与其他类并没有什么不同 先声明、再实现、最后使用,下面用Person类演示如果声明、实现、使用分类
在现有类Person类上增加分类
.h文件
#import <Foundation/Foundation.h>@interface Person : NSObject//person类原有的属性和方法@end</span>.m文件#import "Person.h"@implementation Person//Person类原有的方法的实现@end</span>
1)声明一个分类
格式:
@interface待扩展的类名 (分类的名称) 待扩展的类名在本例中即为Person类
@end
#import <Foundation/Foundation.h>@interface Person : NSObject//person类原有的属性和方法@end//给Person类增加新的方法// 声明一个分类@interface Person (act) -(void)test;@end</span>
2)实现这个分类
格式:
@implementation待扩展的类 (分类的名称)
@end
#import "Person.h"@implementation Person//Person类原有的方法的实现@end//分类方法的实现@implementation Person (act)-(void)test{ NSLog(@"test");}@end</span>
注:分类可以使用原类中已有的实例变量
3)使用分类中的方法
和使用类中原有的方法一样
Person *p = [[Person alloc]init];
[p test];
4)分类可以单独提取出来分别写成.h(分类的声明文件)和.m(分类的实现文件),方法为:Source->Object-C File->File Type->Category
单独文件名命名规范为 带扩展的类名+分类的名称
如上例即为 Person+act
如果分类文件单独出来,则在调用分类方法时需先引入分类头文件
5)分类可以定义实现和原类中同名的方法,调用的时候会使用分类中的同名方法,如果有多个分类都有同名方法,则会调用最后编译的分类中的同名方法
非正式协议
非正式协议就是给NSObject类或者其子类Foundation框架中的类创建的分类又叫做非正式协议,非正式协议一般不需要进行实现,一般在子类中进行方法的重写。
下面代码即为NSString类的一个非正式协议,计算一个字符串中的数字个数并将个数返回。
NSString+countNum.h
#import <Foundation/Foundation.h>@interface NSString (countNum)-(unsigned int)countNum;@endNSString+countNum.m#import "NSString+countNum.h"@implementation NSString (countNum)-(unsigned int)countNum{ unsigned int count = 0; for (int i=0; i<self.length; i++) { unichar c = [self characterAtIndex:i]; if (c<='9'&&c>='0') { count++; } } return count;}@end
延展Extension 单文件方法为:Source->Object-C File->File Type->Extension延展是一种特殊的分类,匿名分类,最大的作用是增加私有成员变量与方法。
延展的定义可以写在被扩展类的.h文件中一实现私有
延展的实现必须在被扩展类的@implementation @end之间实现
- 黑马程序员——OC基础---分类(Category)、非正式协议及分类延展
- 【黑马程序员】OC-分类(Category)及延展(Extendsion)
- 黑马程序员——ios开发基础之OC中的分类、协议、延展和代理
- 黑马程序员---OC学习笔记之分类(Category)非正式协议【重点】
- 黑马程序员---OC学习笔记之分类(Category)延展
- 黑马程序员---OC基础---Block、分类Category、协议protocol
- 黑马程序员---OC分类-category
- 分类(category)非正式协议
- oc协议,延展,分类
- 黑马程序员 oc随机 分类与延展
- 黑马程序员-IOS基础之OC分类(Category)
- OC基础第六章:分类(category) 、延展(Extension)
- OutMan——Objective-C中分类、延展、非正式协议和协议
- OC Category 分类 Extension 延展.md
- 黑马程序员——OC基础学习(五)---分类(Category),代码块Block和protocol代理设计模式
- 黑马程序员-分类、非正式协议、类的扩展的区别
- 黑马程序员------Category:分类
- ——黑马程序员——OC中的分类(Category)总结
- java实例变量初始化
- Python格式化输出
- LeetCode Longest Consecutive Sequence
- VMware虚拟机下RedHat6 配置网络实现远程连接
- 降序排列
- 黑马程序员——OC基础---分类(Category)、非正式协议及分类延展
- 封装、继承、多态的再次理解
- 数据挖掘导论学习笔记之分类基本概念、决策树与模型评估
- 如何区分 const char * p, char * const p, const char * * p?
- 【UML】部署图Deployment diagram(实现图)
- 【Python】Learn Python the hard way, ex21 函数返回值return
- watchOS开发——配置静态通知界面和动态通知界面
- Android音频系统之AudioFlinger(一)
- PreparedStatement和Statement