黑马程序员----objective-C 分类介绍
来源:互联网 发布:多用户 分销 源码 编辑:程序博客网 时间:2024/06/11 14:20
-------android培训、java培训、IOS培训、期待与您交流!-------
Category分类,类别,类目
//可以给某一个类扩充一些方法(不修改原来类的代码)
基本形式
//声明
@interface 类名(分类名称)
@end
//实现
@implementation 类名(分类名称)
@end
代码示例:
//不用继承,不改动Person类的情况下给Person增加一些方法
/*
分类的作用:在不改变原来内容的基础上。可以为类增加一些方法,
分类使用注意:
1,只能增加方法,不能增加成员变量,如果想添加变量,可以考虑通过继承创建子类
2,分类方法实现中可以访问原来类中声明的成员变量
3.分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法无法使用。不建议重写方法
4,方法调用的优先级:分类(最后参与编译的分类优先)--》原来类---》父类,多个Category中如果实现了相同的方法,只有最后一个参与编译的才会有效
5.在很多的情况下,往往是给系统自带的类添加分类,如NSObject和NSString,因为有的时候,系统类可能并不能满足我们的要求。
6.在大规模的应用中,通常把相应的功能写成一个分类,可以有无限个分类,对原有类进行扩充,一般分模块写,一个模块一个分类。
分类好处
一个庞大的类可以分模块开发
一个庞大的类可以由多个人来编写,更有利于团队合作
*/
@interface Person :NSObject
- (void)test;
@end
@implementation Person
- (void)test
{
NSLog(@"---");
}
@end
@interface Person (MJ)
- (void)study;
@end
#import "Person+MJ.h"
@implementation Person (MJ)
- (void)study
{
NSLog(@"学习-----%d", _age);
}
- (void)test
{
NSLog(@"Person (MJ)-test");
}
@end
#import "Person+JJ.h"
@implementation Person (JJ)
- (void)test2
{
NSLog(@"-----test2");
}
- (void)test
{
NSLog(@"Person (JJ)-test");
}
@end
int main()
{
Person *p = [[Person alloc] init];
[p test];
[p test2];
p.age = 10;//
[p study];
// 优先去分类中查找,然后再去原来类中找,最后再去父类中找
return 0;
}
Category的练习
/*
给NSString增加一个类方法:计算字符串中阿拉伯数字的个数
给NSString增加一个对象方法:计算字符串中阿拉伯数字的个数
*/
#import <Foundation/Foundatition.h>
@interface NSString (Number)
+ (int)numberCountOfString:(NSString *)str;
- (int)numberCount;
@end
//@"adfasd1334zd"
@implemetation NSString (Number)
+ (int)numberCountOfString:(NSString *)str
{
//1.定义变量计算数字的个数
int count = 0;
for(int i = 0;i<str.length; i++)
{
unichar c = [str characterAtIndex:0];
//uichar就是 unsign char,characterAtIndex是NSString自带方法传递一个int类型参数.代表传递
字符串第参数个字符
if ( c>='0'&& c<= '9') //if (c>=48&& c<= 57)
{
count++;
}
}
return count;
return [str numberCount];
}
- (int)numberCount
{
int count = 0;
for (int i = 0;i<self.length;i++)
{
unichar c = [self characterAtIndex:i];
if ( c>='0'&& c<= '9') //if (c>=48&& c<= 57)
{
count++;
}
}
return count;
}
@end
int main()
// 类库 : 很多类的集合
{
int count = [NSString NumberCountOfString:@"sdf4546dfett"];
int count2 = [@"5sadf65dfeyh",count];
NSLog(@"%d,%d",count,count2 );
}
类的深入研究
(一)类的本质
类本身也是一个对象,是class类型的对象,简称“类对象”
Class类型的定义:
Typedef struct obj class *class;
类名就代表着类对象,每个类只有一个类对象。
利用class 创建 Person类
利用Person 创建Person类型的对象
Person *p=[[Person alloc] init];
获取内存中的类对象有两种方法:
(1)Person *p=[[Person alloc] init];
class c=[p claas];//指向类的对象的指针调用class方法,对象方法
(2)Class c1=[Person class];//使用类名调用class方法类方法
注意:c和c1打印出来的地址相同,class c2=[p claa];可以证明所有的对象共用一个类方法。
(二)类的加载和初始化
//当程序启动的时候,就会加载一次项目中所有的类。类加载完毕后就会调用+load方法
+ (void)load
{
NSLog(@"Person---load");
}
//当第一次使用这个类的时候,就会调用一次+initialize方法
+ (void)initialize
{
NSLog(@"Person-initialize");
}
@end
@implementation Student
//在类被加载的时候调用,重写方法
+ (void)load
{
NSLog(@"Student---load");
}
+ (void)initialize
{
NSLog(@"Student +initialize");
}
/*
1.当程序启动时,就会加载项目中所有的类和分类,而且加载后会调用每个类和分类的+load方法。只会调用一次。
2.当第一次使用某个类时,就会调用当前类的+initialize方法
3.先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方法)
4.先初始化父类,再初始化子类(先调用父类的+initialize方法,再调用子类的+initialize方法).注意:在初始化的时候,如果在分类中重写了+initialize方法,则会覆盖掉父类的。
5.重写+initialize方法可以监听类的使用情况。
*/
int main()
{
Person *p = [[Person alloc] init];
// [[GoodStudent alloc] init];
Person *p1 = [[Person alloc] init];
return 0;
}
- 黑马程序员----objective-C 分类介绍
- 黑马程序员------[Objective-C]分类-Category
- 黑马程序员---Objective-C 分类-Category
- 黑马程序员 之 Objective-C 分类与协议
- 黑马程序员——Objective-C介绍
- 黑马程序员------[Objective-C]初识Objective-C
- 黑马程序员 Objective-C入门
- 黑马程序员---Objective-C autorelease
- 黑马程序员---Objective-C Block
- 黑马程序员---Objective-C Protocol
- 黑马程序员---Objective-C Foundation
- 黑马程序员---Objective-C NSDictionary
- 黑马程序员--Objective-C 简介
- 黑马程序员—Objective-C基础_分类以及类的本质
- 黑马程序员————Objective C——点语法和分类
- 黑马程序员——Objective-C分类 (category)和扩展(Extension)——黑马 ios 技术博客
- 黑马程序员——Objective-c——一些基础介绍
- 黑马程序员----Objective-C学习笔记之点语法的介绍和使用
- 编码与加密
- everything start from keystone(2)
- android数据存储
- 内容观察者(针对contentprovider)
- 第六周项目4成员函数、友元函数和一般函数有区别
- 黑马程序员----objective-C 分类介绍
- 用css3拼凑出来的桃心
- Android创建桌面快捷方式
- cocos2dx 3.0 了解有限状态机01
- 第六章——访问权限控制
- crontab的日志分析
- 心路(一)
- 第6周-二试窗口-当年第几天
- Date Format Pattern