美文网首页
Objective-C 之类的扩展

Objective-C 之类的扩展

作者: CarsonChen | 来源:发表于2016-01-29 21:54 被阅读21次

一. Category(类目)

优点:为没有源码的类(系统类)扩充功能,通过原有类(+方法)或者原有类的对象(-方法)直接调用,并且可以继承.

注:该方法只能扩充方法,不能扩充实例变量.

新建文件使用 Objective - C File,File type 改为 category,下写要扩展的类名字.

则创建完后会在工程包内生成一对.h与.m文件.在.h文件中声明需要添加的方法

@interface NSMutableArray (Additions)

+ (void)sayHi;

- (void)sayHi;

@end

在.m文件中对方法进行实现:

@implementation NSMutableArray (Additions)

+ (void)sayHi {

NSLog("Hello,world!");

}

- (void)sayHi {

NSLog("Hello,world!");

}

@end

类目的使用,即在main.m文件中引入类目文件,即可在无源码类实现+,-方法.

二. Extension(延展)

类外部不能直接访问,甚至子类也不能直接访问的私有实例变量以及方法.将此段代码写入到类的.m文件中隐藏.

目的:为了能或得源代码类添加私有的实例变量和方法.

能做Extension的类必须是能够或得源代码的类.

Extension的语法与Category的语法类似,相当于将Category的语法挪到了.m文件中.

在该类的.h中声明的实例方法,才可以对其私有的实例变量以及私有方法进行操作.

私有的方法定义同样是在类的.m文件的@implementation下进行定义的.

三. 总结

类功能的扩充:

继承 Inheritance

协议 Protocol

类目 Category 为不能提供源码的类扩充方法

延展 Extension 类有源码,添加私有的实例变量与方法.

四. Delegate(代理设计模式)

优点: 将固定的方法交给指定的对象来完成.为代理设计模式.

在需要代理的类中声明协议,在.h文件中属性声明特有的协议,注意此处属性的特性用assign,代理对象通过实现协议中定义的方法,最有由雇主对象调用delegate有代理对象完成操作.

相关文章

  • Objective-C 之类的扩展

    一. Category(类目) 优点:为没有源码的类(系统类)扩充功能,通过原有类(+方法)或者原有类的对象(-方...

  • Objective-C基础学习之类扩展(Class Extens

    1.什么是类扩展 延展类别又称为扩展(Extendsion),Extension是Category的一个特例 可以...

  • Objective-C 之Extension

    Objective-C 之Extension class extension:类扩展 类扩展与 category ...

  • iOS面试 --Objective-C相关

    Objective-C的扩展机制 Category 分类 通过它来扩展方法 Associated Object关联...

  • objc 消息转发

    Objective-C Objective-C 扩展了 C 语言,并加入了面向对象特性和 Smalltalk 式的...

  • Objective-C Runtime

    Objective-C Objective-C 扩展了 C 语言,并加入了面向对象特性和 Smalltalk 式的...

  • iOS移动App开发测试实践

    一、关于Objective-C Objective-C是基于C语言的扩展,1985年Jobs创立NeXT公司,致力...

  • iOS Block

    block 是objective-c对C做的扩展,使用block可以更好的简化objective-c编程,可以理解...

  • Google的Objective-C编码规范

    Google的Objective-C编码规范 总览 背景知识 Objective-C是一个C语言的扩展语言...

  • 21.Swift学习之扩展

    扩展 为现有的类、结构体、枚举类型、协议添加了新功能。扩展和 Objective-C 中的分类类似。 扩展可以:添...

网友评论

      本文标题:Objective-C 之类的扩展

      本文链接:https://www.haomeiwen.com/subject/vkvjkttx.html