oc类的功能的拓展与延展

类的扩展

一   类目

(类目也称为分类,为没有源码的类添加方法。)

1.作用

1)可以扩展别人的类,可以作为子类的替代方法。

2)把同一类的代码放到多个文件中。

2.形式

1)文件名:目标类+类目名.h

目标类+类目名.m

2).h文件中

@interface 需要扩展的类的类名(分类名)

-( )method;

@end

eg:

为字符串添加一个类

NSString+SayHi.h

@interface NSString (SayHi)

-(void)sayHi;//为字符串添加方法

@end

NSString+SayHi.m

@implementation NSString (SayHi)

-(void)sayHi

{

NSLog(@"我是一个特殊字符串 %@,我有sayHi方法",self);

}

@end

3.注意

1)可以为同一个类添加多个类目,但类目名和方法不能重复。

2)不可以随意重写类中的方法。

3)所添加类与原类中方法同级,而且会被子类继承。

二 延展

(延展是特殊形式的类目)

1.作用

为自己的类添加私有方法

2.形式

@interface  类名

-( )method;

@end

@implementation 类名

……

@end

eg:

Person.h

@interface Person : NSObject

-(void)sayHi;

@end

Person.m

@interface Person(extension)

-(void)test;//声明

@end

@implementation Person

-(void)sayHi

{

[self test];

}

-(void)test//实现

{

NSLog(@"...");

}

@end

3.注意

1)不需要创建新文件,直接在原类的.m文件中声明和实现。

2)所谓私有时候仅.m通过[self method]访问,不能在外部通过[对象 method]访问。

三  协议

(协议是由@protocol 声明的一组方法列表,只声明方法,不具体实现)

1.作用

将方法定义剥离出来,形成一个单独的文件。

2.形式

@protocol 协议名<其他协议>

-()method;

@end

注:方法默认是@required 必须实现,如果可以不实现用@optional。

3.代理模式

(由别人帮自己实现某个功能的模式称为代理模式)

1)接受代理

@ interface 类名:父类名 <协议名>(多个协议之间用逗号隔开)

….

@end

2)确认协议

@implementation  类名

协议方法

{

}

@end

(代理是谁,谁接受并确认协议)

4.注意

1)协议声明了可以被任何类实现的方法。

2)协议定义了一个其他对象可以实现的接口。

oc类的功能的拓展与延展

时间: 2024-10-14 23:23:03

oc类的功能的拓展与延展的相关文章

OC 类目(category) 延展(extension) 协议(protocol)(摘抄)

Objective-c中提供了可以让我们扩展类定义的手段:类目,延展和协议.类目:为已知的类增加新的方法:延展:通知在本类的定义里使用类目来声明私有方法:协议:协议声明了可以被任何类实现的方法. 注意:这些手段只能增加类的方法,并不能用于增加实例变量,要增加类的实例变量,只能通过定义子类来间接实现. 1.类目 1)声明类目 @interface NSString (NumberConvenience) -(NSNumber *)lengthAsNumber; @end 该声明具有2个特点.首先,

《黑吗程序员》OC的认识和第一个OC类

面向对象和面向过程的区别 ① oc是面向对象 ② c是面向过程 ③  面向对象和面向过成只不过是解决问题的两种不同的思路 ④  面向过程只不过是考虑问题解决的步骤,面向对象只不过是考虑解决问题需要的对象. OC 类的认识      类的设计必须关心三样事物: ① 类名 ② 属性 ③ 行为 类名:所有的名词都是类名,且类名的第一个字母必须大写. 如果类名有多个名词,要使用驼峰标示. 属性:代表这个类在创建出来所拥有的的属性. 行为: 这个类所拥有的功能. 类的创建 // 类的声明 @interfa

Objective-C中的类目(Category),延展(Extension)

类目和延展的作用都是为了扩展一个类. Objective-C中的类目(Category) 一.类目的定义和作用 类目也叫分类,英文Category,在没有原类.m文件的基础上,给该类添加方法. 比如,NSString类原本没有helloString方法,我们又没有NSString类的原代码,那我们想给NSString类添加一个helloString的方法,只有通过声明子类或者类目才可以达到这个目的. 二.类目的声明: @interfaceNSString (hello) - (void)hell

修复VS2008 MFC类添加功能[转载+编辑]

VS2008 MFC类向导不能正确加载启动类向导给对话框添加类时出现网页错误提示:"行: 815错误: 对象不支持此属性或方法"勾选"使用 Internet Explorer 中的内置脚本调试程序"后再次出现页面错误提示:"行: 815char 3错误:对象不支持此属性或方法代码:0URL:file:///D:/Microsoft%20Visual%20Studio%209.0/VC/VCWizards/CodeWiz/MFC/Simple/HTML/20

OC类的继承以及类的循环调用

一, 关于OC的实例变量的可见度,即实例变量的访问权限有三种: 1),@public           公有的 被@public修饰的实例变量是公共的,即没有访问权限,在任何文件中都可以访问,(访问方式是通过对象+指向操作符) 2),@protected    受保护的 被@protected修饰的实例变量有一定的访问限,只允许在本类文件及子类文件中访问,其他文件不可访问 3),@private         私有的 被@private 修饰的实例变量,只允在在本类文件中访问,不可以在子类文

OC类的声明和实现,书写容易犯的错误

oc类的声明和实现,书写时候,容易犯的错误主要包括以下几点: 1.只写声明,不写实现 2.将@end这个结束标记忘记了 3.类的声明或者实现都不能写在c的函数中 4.属性的声明必须写在大括号当中 5.在声明属性的时候,不能直接赋值 6.声明与实现不能嵌套 7.方法的声明,只能写在大括号的下面,@end上面 8. '-[Person run]: unrecognized selector sent to instance 0x100109c80'  经典错误(记住),就是对象没有找到run这个方法

OC面向对象之第一个OC类

在学过java.c++这样语言之后,再来学习OC语言,虽然也同样是面向对象的语言,但是OC语言仍然给我们一种很"怪异"的感觉.这主要是由于OC语言本身有着它独特的命名和使用方法.总结java语法和OC语法的使用,我们会发现其实还是有很多规律可循的.下面就总结了OC类的一些特性. 一.关于OC类 1.oc中一般用两个文件描述一个类,与java是不同的. 2.后缀.h文件是类的声明文件,用于声明成员变量.方法.使用关键字@interface和@end; 而且.h文件只作声明,并没有对类的方

【ListViewJSON】【工具类的功能与实现】

接上一篇博客,这篇博客的重点是分析listviewjson项目中的工具类的功能,以及如何更好地使用这套工具. 项目源码结构图: 假设现在有一个新的项目,同样是解析json数据,并将其显示到listview中. 那么现在考虑一下如何在两个项目之间进行移植. 首先com.demo.app.common是可以直接进行移植的. 那么需要重新写的就是1.bean 2.adapter 3.以及所有和获取列表数据有关.将数据加载到listvie文中有关的类. MainActivity中通过 NewsList

1.4为类添加功能 :类方法和实例方法

添加通过方法为类添加功能                                                              ios7cook目录 方法是类的建筑块.例如,一个名为Person类可以有,如散步逻辑功能,呼吸,吃饭,喝水.这些功能通常是封装的方法. 一种方法可以带参数,当调用方法,或者仅显示该方法时,调用者传递的变量.例如,在一个简单的世界里,我们有一个Person类的walk方法.如果你愿意,你可以添加一个参数或参数的方法,并将其命名为CGFloat类型的w