Objectiv-C 类的扩展

在oc中要为类扩充功能有如下几种方式:

1.子类化:通过继承类并添加方法实现功能扩充(该方式可以扩充方法,也可以扩充实例变量)

2.直接在该类中修改源代码

3.Category

category叫分类,类目

是为没有源代码的类扩充功能,扩充的功能会成为原有类的一部分,可以通过原有类或者原有类的对象直接调用,并且可继承

该方式只能扩充方法,不能扩充实例变量

(1)在类目的.h文件中声明需要添加的方法

@interface NSString (AddMethod)

//????声明sayHi方法????
+ (void)sayHi;
@end

在类目的.m文件中实现对应的方法

@implementation NSString (AddMethod)

//实现sayHi方法

+ (void)sayHi

{

  NSLog(@"Hello");

}

@end

4.Extension

extension叫延展

为能够获得源代码的类添加私有的实例变量和方法

使用方法:相当于把category的.h文件挪到原始类的.m文件中

例子:

使用延展为Teacher类添加一个私有的方法(领工资的方法),同时添加私有的实例变量(_salary)存储对应的薪资

代码如下:

Teacher类中.m文件中的代码
@interface Teacher()

{
    NSInteger _salary;
}

- (NSInteger)getSalary;

@end
@implementation Teacher

- (NSInteger)getSalary
{
    NSLog(@"这个月发了不少,可以吃大餐了");
    _salary = 10000;
    return _salary;
}
@end

5.协议(类服从协议,实现协议中的方法来扩充功能,但只能扩充方法,不能扩充实例变量,必须要拥有该类的源代码)

Delegate叫代理

delegate设计模式有三个要素:委托方,代理方,协议

协议是一套标准(方法的声明),只有.h文件

注意:协议的方法默认是必须实现的,即@required修饰的方法。关键字@optional修饰的方法是可选的,可实现也可不实现

实现步骤:

1.委托方制定一套协议(在委托方的.h文件中)

2.委托方声明一个delegate属性(assign修饰),存储代理方对象:@property(nonatomic,assign) id<协议名> delegater;

3.代理方需要遵守协议,对协议中的方法进行实现

4.将代理方设置为委托方的代理人

5.委托方在合适的时机通知代理方对象去执行相应的操作(代理方对象调用respondsToSelector方法判断能否响应选定的方法)

时间: 2024-10-09 17:45:08

Objectiv-C 类的扩展的相关文章

类的扩展--类目--ios

person+money.h  这是类目类 #import "Person.h" //这是扩展person类的接口类,独立一个文件 @interface Person (Money) -(void) haveMoney; @end person+money.m 这是类目类 #import "Person+Money.h" //这是扩展person类的实现类,独立一个文件 @implementation Person (Money) -(void) haveMoney

通讯聚合类Chrome 扩展:All-in-One Messenger,把主流聊天服务聚合在一个应用窗口内

原文地址:http://whosmall.com/?post=420 本文标签: Chrome扩展 Chrome浏览器 通讯聚合类Chrome扩展 All-in-One-Messenger 主流聊天服务聚合 我发现了 All-in-One Messenger,它是一款轻量的 Chrome 扩展,作用与 Franz基本相同,只需要打开一个窗口,所有的通讯服务会以网页标签栏的形式呈现,方便你自如切换,可以大大提高了沟通的效率.但是和「庞大」的 Franz 相比,All-in-One Messenge

ASP.Net string 类的扩展方法 [转]

string 类的扩展方法列表(基本相同于 IEnumerable<T> 接口的成员列表): Aggregate<>     //累加 All<>        //是否都满足条件 Any<>        //是否有一个满足条件 AsEnumerable<>  // AsParallel<>    // AsQueryable<>    // Average<>      //平均值 Cast<>

ios开发类的扩展

类扩展常见方法:定义子类.遵循协议.使用分类.源文件拓展. 源文件拓展:语法:在声明@implementation前添加 @interface 类名() .... @end 分类Category 向现有类中添加方法时添加子类不方便 分类是对现有类的扩展,分类只扩展方法,不扩展属性 协议Protoccol 可以用来声明一大堆方法 只要某个类遵循了这个协议,就相当于拥有了这个协议中的所有方法声明

JavaScript学习总结(十四)——JavaScript编写类的扩展方法

在?J?a?v?a?S?c?r?i?p?t?中?可以使?用?类的p?r?o?t?o?t?y?p?e属性来?扩?展?类的属?性?和?方?法,在实际开发当中,当JavaScript内置的那些类所提供的动态方法和动态属性不满足我们实际开发时,我们就可以通过"prototype"属性给自定义类添加方法和属性或者扩展原有的类中的方法和属性. 一.扩展JavaScript内置类,添加动态方法 语法格式: 类名.prototype.方法名 = function([param1],[param2],.

Java程序员的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)

计划按如下顺序完成这篇笔记: 1.    理念. 2.    属性复制和继承. 3.    this/call/apply. 4.    闭包/getter/setter. 5.    prototype. 6.    面向对象模拟. 7.    jQuery基本机制. 8.    jQuery选择器. 9.    jQuery工具方法. 10.    jQuery-在"类"层面扩展. 11.    jQuery-在"对象"层面扩展. 12.    jQuery-扩

Objective-C(11)类的扩展---分类

什么是分类? 对现有类的扩展,分类只扩展方法,不扩展属性. 分类不改变原来类的代码. 分类的语法和类的语法类似,Xcode添加分类: Objective-C File

类的扩展(Extension , NSData, NSDateFormatter, Category, Extension, Protocol, delegate)

类的扩展         OC数据类型         1.NSInteger, NSUInteger         2.CGFloat         3.NSString, NSMutableString         4.NSArray, NSMutableString         5.NSNumber         6.NSDictionary, NSMutableDictionary         7.NSSet, NSMutableSet              NSD

iOS OC07.2_类的扩展

类目 //1.系统已经写好的类目:按照功能对系统的类方法进行区分 //[email protected]开始,后面是当前类的名字,类名后面是分类的功能,到@end结束 //2.我们创建的类目,一般是为了把系统的类进行功能扩充 // NSString *[email protected]"2015-07-12 10:00:00"; // NSString *[email protected]"2015-07-12 09:00:00"; //// [str sayHi]

错误: 在类 Main 中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args) 否则 JavaFX 应用程序类必须扩展javafx.application.Application

错误: 在类 Main 中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args)否则 JavaFX 应用程序类必须扩展javafx.application.Application 出现这种错误的原因其中一种就是 导包时错把其他的String包导入,以至于找不到main(String[ ]  args) 原文地址:https://www.cnblogs.com/mibloom/p/9497357.html