holydancer原创,如需转载,请在显要位置注明:
转自holydancer的CSDN专栏,原文地址:http://blog.csdn.net/holydancer/article/details/7364900
封装是面向对象的一个特征,OC也不意外,但是有的时候我们会碰到这样一种情况,比如我封装了一个类,不想再动它了,可是随着程序功能的增加,需要在那个类中增加一个小小的方法,这时我们就不必在那个类中做修改,只需要在用到那个方法时随手添加一个该类的类别(category)即可,让我们来看代码:先建一个空类Men,里面没有任何的属性和方法。然后在main.m中我们这样写:
- #import <Foundation/Foundation.h>
- #import "Men.h"
- @interface Men(menAdd)//说明该类别名叫menAdd,是对Men类的补充。
- -(void)speak;
- @end
- @implementation Men(menAdd)
- -(void)speak
- {
- NSLog(@"我是类别补充的speak方法");
- }
- @end
- int main(int argc, const char * argv[])
- {
- @autoreleasepool {
- Men *man =[[Men alloc]init];
- [man speak];
- }
- return 0;
- }
2012-03-17 20:05:50.485 category1[353:403] 我是类别补充的speak方法
看起来很简单吧,我们只需要记住简单的语法规则就好,另外,需要注意的是如果speak方法是在men类中本身就有的,那么类别中的speak方法会覆盖men中的speak方法,有点儿像重写,而且类别只能添加方法,不能添加属性变量。另外利用类别的这种特性,我们可以实现这样一种效果:我们可以将一个类中方法声明写成类别的形式,这样,我们就可以在不同的.m实现文件中实现这些类别声明的方法,这样我们可以将一个类的实现写到多个.m文件中,方便管理。
最后,类别还有一种使用方法称为非正式协议,(OC中有正式协议和非正式协议,我们下次介绍正式协议),我们可以创造一个NSObject类的类别,因为基本所有的常用类都继承自NSObject类,所以我们可以在任何类中使用该类别实现的方法,类似于协议,所以称之为非正式的,OC中的协议是类似于JAVA中接口一样的存在。我们将上面那段代码简单修改下,便会发现这种非正式协议的用法很简单实用。
- #import <Foundation/Foundation.h>
- #import "Men.h"
- @interface NSObject(menAdd)//说明该类别名叫menAdd,是对Men类的补充。
- -(void)speak;
- @end
- @implementation NSObject(menAdd)
- -(void)speak
- {
- NSLog(@"我是NSObject类中以类别实现的speak方法");
- }
- @end
- int main(int argc, const char * argv[])
- {
- @autoreleasepool {
- NSString *str=[[NSString alloc]init];
- [str speak];
- }
- return 0;
- }
2012-03-17 20:21:06.425 category1[381:403] 我是NSObject类中以类别实现的speak方法
这样通过创建一个NSObject类别,我们在一个字符串对象都可以调用里面实现的speak方法,好用好用真好用。好了,下回介绍正式协议。
关键字:objective-c ,objective c , oc ,类别 ,非正式协议 ,category
相关推荐
Objective-C语言将决定尽可能的从编译和链接时推迟到运行时。只要有可能,Objective-C总是使用...本文档将具体介绍NSObject类以及Objective-C程序是如何和运行时系统交互的。特别地,本文档还给出来怎样在运行时动态地加
前6章讲述objective-c语言,包括数据类型、运算符、表达式、条件语句、循环语句、类、协议、继承、类别、编译预处理等内容。第7章到第10章讲述objective-c的基础框架,以及文件操作、内存管理、数据保存等内容。第11...
Objective-C 2.0之前需要了解的:关于Obj-C内存管理的规则。
Objective-C语言的许多决策可以在编译和运行时执行。只要有可能,它是动态的。这意味着Objective-C语言不仅需要一个编译器,还需要一个运行时系统来执行编译的代码。Runtime系统是一种用于Objective-C语言的操作系统...
本书结合理论知识与示例程序,全面而系统地讲述Objective-C编程的相关内容,包括Objective-C在C的基础上引入的特性和Cocoa工具包的功能及其中的框架,以及继承、复合、源文件组织等众多重要的面向对象编程技术。...
通过学习Objective-C的基本语法、类和对象、控制流程和方法等内容,你将能够编写简单的Objective-C程序并逐渐掌握更复杂的概念。继续学习和实践,你将能够开发各种类型的应用程序,并为用户提供出色的体验。祝你在...
《Objective-C 程序设计(第4版)》作者假设读者没有面向对象程序语言或者C语言(Objective-C基础)编程经验,因此,初学者和有经验的程序员都可以使用这本《Objective-C 程序设计(第4版)》学习Objective-C。...
Objective-C,通常写作ObjC和... 让我们先来看看C++和Objective-C中对于类的宣言 : C++ #include "BaseClass.h" class MyClass : public BaseClass { public: MyClass(); .......................
Objective-C基础教程.pdf(Learn Objective-C on the Mac中文版) 中文扫描版 + 英文电子书 + 源码 该资源在Mac下用BetterZIP压缩,共三个分卷,其他分卷在我的资源中找。 更新: Windows下使用7zip对part1解压...
C语言主要知识点巩固(学习Objective-C 的前提),PPT格式。
本书全面而系统地讲述Objective-C语言的基础知识和面向对象编程的重要概念,结合实例介绍了Cocoa工具包的优秀特性和其中的框架,以及继承、复合、源文件组织、内存管理、对象初始化和类别创建等众多重要的面向对象...
用Objective-C语言实现了各种设计模式,收集各种例子,方便大家学习和普及设计模式。.zip用Objective-C语言实现了各种设计模式,收集各种例子,方便大家学习和普及设计模式。.zip用Objective-C语言实现了各种设计...
Objective-C Programming: The Big Nerd Ranch Guide (2nd Edition).epub (epub 格式) Want to write iOS apps or desktop Mac applications? This introduction to programming and the Objective-C language is ...
Objective-C基础教程:1天玩转Objective-C语法
Objective-C是扩展C的面向对象编程语言,也是iPhone开发用到的主要语言。本书结合理论知识与示例程序,全面而系统地讲述Objective-C编程的相关内容,包括Objective-C在C的基础上引入的特性和Cocoa工具包的功能及其中...
提供Swift丰富的扩展和实用工具类,并大多数支持Objective-C。.zip提供Swift丰富的扩展和实用工具类,并大多数支持Objective-C。.zip提供Swift丰富的扩展和实用工具类,并大多数支持Objective-C。.zip提供Swift丰富...
Objective-C高级编程 iOS与OS X多线程和内存管理.pdf
Object-C语言教程:Objective-C 简介