分类(Category 、Extension)
(一)分类的划分
 
  (2) 1、(命名的类别)类别Category:只能添加新的方法,不能添加新变量。
  
       2、(未命名的类别)类的扩展Extension://扩展一般直接写在类的实现文件中

               //扩展中定义的都是类中私有的实例变量和方法

(二)分类的使用

(1)分类只能增加方法(包括类方法和对象方法),不能增加成员变量

(2)在分类方法的实现中可以访问原来类中的成员变量;

(3)分类中可以重新实现原来类中的方法,但是会覆盖掉原来的方法,导致原来的方法无法再使用(警告);

(4)方法调用的优先级:分类->原来的类->父类,若包含有多个分类,则最后参与编译的分类优先;

(5)在很多的情况下,往往是给系统自带的类添加分类,如NSObject和NSString,因为有的时候,系统类可能并不能满足我们的要求。

(6)在大规模的应用中,通常把相应的功能写成一个分类,可以有无限个分类,对原有类进行扩充,一般分模块写,一个模块一个分类。

//自定义的字符串类String

 //  String.h
// 类别
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h> @interface String : NSObject
@property(nonatomic,strong)NSString* string;
-(id)initWithString:(NSString*) str;
-(void)print;
@end
 //  String.m
// 类别
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import "String.h"
//#import "String_String_private.h"//在String类单独导入一个类扩展文件 //类扩展extension,添加的属性str1和show方法都是私有的,只能在String类中可以访问得到
@interface String()//直接将类扩展文件写入String类的实现中
{
NSString *str1;
}
-(void)show;
@end @implementation String
-(id)initWithString:(NSString*) str
{
self = [super init];
if(self)
{
_string = str;
}
return self;
}
-(void)show
{
NSLog(@"string is runing");
}
-(void)print//通过print方法访问到类扩展中添加的属性和方法
{
[self show];
NSLog(@"%@",_string);
}
@end

//单独的类扩展文件

 //  String_String_private.h
// 类别
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import "String.h" @interface String ()
{
NSString *str1;
}
//@property(nonatomic,strong)NSString* str1;
-(void)show;
@end

//类别文件

 //  String+Count.h
// 类别
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import "String.h"
//String的类别Count,添加的方法,对String类进行功能的扩展(切记:类别中只能添加方法)
@interface String (Count)
-(NSInteger) nmuberOfString: (NSString *)str;
-(NSInteger) numberOfCount: (NSString *)str;
@end
 //  String+Count.m
// 类别
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import "String+Count.h" @implementation String (Count)
-(NSInteger) nmuberOfString: (NSString *)str
{
NSInteger count = ;
for(int i=;i<str.length;i++)
{
unichar ch = [str characterAtIndex:i];
if(ch>='' && ch<='')
count++;
}
return count;
}
-(NSInteger) numberOfCount: (NSString *)str
{
NSInteger count = ;
for(int i=;i<str.length;i++)
{
unichar ch = [str characterAtIndex:i];
if(ch>='' && ch<='')
count++;
}
return count;
}
@end

//主函数测试

 //  main.m
// 类别
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h>
#import "String+Count.h"
#import "String.h"
int main(int argc, const char * argv[])
{
@autoreleasepool
{
//测试类扩展(未命名的类别) 关键字:extension
String *string = [[String alloc]initWithString:@"xiayuan"];
[string print]; //测试类别(命名的类别) 关键字:Category
NSInteger a = [string nmuberOfString:@"xu3984jjsn6ew32"];
NSLog(@"a = %ld",a); NSInteger b = [string numberOfCount:@"36y3jfse93u4gdf8"];
NSLog(@"b = %ld",b);
}
return ;
}

//运行结果

2015-08-12 15:24:06.281 类别[1304:75695] string is runing

2015-08-12 15:24:06.282 类别[1304:75695] xiayuan

2015-08-12 15:24:06.282 类别[1304:75695] a = 7

2015-08-12 15:24:06.282 类别[1304:75695] b = 7

Program ended with exit code: 0

Objective-C:分类(Category、extension)的更多相关文章

  1. Objective-C分类 (category)和扩展(Extension)

    1.分类(category) 使用Object-C中的分类,是一种编译时的手段,允许我们通过给一个类添加方法来扩充它(但是通过category不能添加新的实例变量),并且我们不需要访问类中的代码就可以 ...

  2. OC中分类(Category)和扩展(Extension)

    1.分类的定义 category是Objective-C 2.0之后添加的语言特性,中文也有人称之为分类.类别.Category的主要作用是为已经存在的类添加方法.这个大家可能用过很多,如自己给UIC ...

  3. Objective-C:继承、分类(Category、extension)、协议(protocol),个人理解,仅供参考

    总结:继承.分类(Category.extension).协议(protocol)   一.继承: (1)特点: 继承多用于一般父类中的方法功能比较齐全,子类从父类继承过来使用,可以省略很多重复的代码 ...

  4. 分类(Category)的本质 及其与类扩展(Extension) /继承(Inherit)的区别

    1.分类的概念 分类是为了扩展系统类的方法而产生的一种方式,其作用就是在不修改原有类的基础上,为一个类扩展方法,最主要的是可以给系统类扩展我们自己定义的方法. 如何创建一个分类?↓↓ ()Cmd+N, ...

  5. iOS中 分类(category)与扩展(Extension)的区别?

    1.分类(category)的作用 (1).作用:可以在不修改原来类的基础上,为一个类扩展方法.(2).最主要的用法:给系统自带的类扩展方法. 2.分类中能写点啥? (1).分类中只能添加“方法”,不 ...

  6. App开发流程之使用分类(Category)和忽略编译警告(Warning)

    Category使得开发过程中,减少了继承的使用,避免子类层级的膨胀.合理使用,可以在不侵入原类代码的基础上,写出漂亮的扩展内容.我更习惯称之为"分类". Category和Ext ...

  7. Runtime - ③ - 分类Category探究

    写博客只是为了让自己学的更深刻,参考:https://tech.meituan.com/DiveIntoCategory.html 分类(Category)是个啥玩意儿这里就不多介绍了,这里主要是研究 ...

  8. iOS之分类(category)

    1.分类(category)的作用 1.1作用:可以在不修改原来类的基础上,为一个类扩展方法.1.2最主要的用法:给系统自带的类扩展方法. 2.分类中能写点啥? 2.1分类中只能添加“方法”,不能增加 ...

  9. 从C#到Objective-C,循序渐进学习苹果开发(3)--分类(category)和协议Protocal的理解

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本文继续上一篇随笔<从 ...

随机推荐

  1. Gitlab-API各状态码解释

    200 – OK : This means that the GET , PUT, or DELETE request was successful. When you request a resou ...

  2. nginx、php-fpm、swoole HTTP/TCP压测对比

    本次测试是在win7下docker环境中进行压测,共创建一个nginx容器.一个php-fpm容器和一个swoole容器,客户端请求nginx服务器,nginx接收用户访问请求并转发给php-fpm, ...

  3. Eclipse反编译插件的安装

    步骤: 1.已经安装了Eclipse,如我的Eclipse目录:C:\Programs\JAVA\eclipse 2.反编译插件包:eclipse 反编译插件 jad 3.3.0.zip 3.解压反编 ...

  4. 《Android源码设计模式》--模板方法模式

    No1: 模板方法模式包括:抽象类(其中定义了一系列顺序方法).具体实现类A.具体实现类B 如果子类有实现不一样的细节,重写父类的某个方法即可 No2: AsyncTask对象调用execute方法后 ...

  5. React Native之数据存储技术AsyncStorage

    1. 如何将数据存储到本地? 数据存储是开发APP必不可少的一部分,比如页面缓存,从网络上获取数据的本地持久化等,那么在RN中如何进行数据存储呢? RN官方推荐我们在RN中使用AsyncStorage ...

  6. 【洛谷】2607: [ZJOI2008]骑士【树形DP】【基环树】

    P2607 [ZJOI2008]骑士 题目描述 Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬. 最近发生了一件可怕的事情,邪恶的Y国发动了一 ...

  7. VC/MFC分割字符串(SplitString)返回CStringArray

    引自:http://bbs.csdn.net/topics/60321228 原版: CStringArray* SplitString(CString string, char pattern) { ...

  8. bestcoder#23 1002 Sequence II 树状数组+DP

    Sequence II Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  9. Codeforces Round #280 (Div. 2) A. Vanya and Cubes 水题

    A. Vanya and Cubes time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  10. 基于直接最小二乘的椭圆拟合(Direct Least Squares Fitting of Ellipses)

    算法思想: 算法通过最小化约束条件4ac-b^2 = 1,最小化距离误差.利用最小二乘法进行求解,首先引入拉格朗日乘子算法获得等式组,然后求解等式组得到最优的拟合椭圆. 算法的优点: a.椭圆的特异性 ...