类别
利用objective-c的动态运行时分配机制,可以为现有的类添加新方法。
1.类别的声明
@interface NSString (NumberConvenience)
- (NSString *) lengthAsNumber;
@end //NumberConvenience
上面的声明表示:类别的名称是NumberConvenience,而且该类别将向NSString类中添加方法lengthAsNumber。
只要保证类别的唯一性,可以向一个类中添加任意多的类别。
2. 实现类别
@implementation NSString (NumberConvenience)
- (NSString *) lengthAsNumber{
unsigned int length = [self length];
return ([NSNumber numberWithUnsignedInt: length]);
}//lengthAsNumber
@end // NumberConvenience
3.类别的局限性
a.无法向类中添加新的实例变量,类别没有位置容纳实例变量
b.名称冲突,即类别中的方法与现有的方法重名,当发生冲突时类别具有更高的优先级。
4.类别的作用
(1).将类的实现分散到多个不同文件或者不同的框架中
(2).创建对私有方法的前向引用
【Cocoa中没有真正的私有方法,则实现私有方法类似功能的方法为:
先在类别中声明方法;然后到现有类的实现中实现该方法。
这样这个类中的其他方法可以使用该方法,而其他外部的类就不会知道该方法的存在了。】
(3).向对象添加非正式协议。
【创建一个NSObject的类别称为创建一个非正式协议。】
5.委托delegate是一种对象,另一个类的对象会要求委托对象执行它的某些操作。
受委托对象在某个时间(某个事件触发)时,会自动通知委托对象执行委托方法。
6.选择器:@ selector():选择器只是一个方法名称,但它以objective-c运行时使用的特殊方式编码,以快速执行查询。圆括号中的内容是方法名。
所以Car类的setEngine:方法的选择器是:@ selector (setEngine:)
受委托对象如何知道其委托对象是否能处理它(受委托对象)发送给它(委托对象)的消息?
通过选择器,受委托对象先检查委托对象,询问其是否能响应该选择器。如果能,则向它发送消息。
分享到:
相关推荐
1. **Objective-C基础**:Objective-C是在C语言基础上扩展的,因此,理解C语言的基本语法是必要的。Objective-C添加了消息传递机制、类和协议等面向对象特性。 2. **消息传递**:Objective-C中的对象通过发送消息来...
Objective-C是基于C语言的,主要用于构建iOS和macOS应用程序,而Objective-C++则是Objective-C的一个扩展,它引入了C++的特性,使得开发者可以同时利用Objective-C的动态特性和C++的面向对象编程能力。 ### ...
3. **Objective-C语法**:深入解析Objective-C的语法特性,如消息传递、方法定义、属性声明、类别(Category)和协议(Protocol)等,以及如何使用这些特性编写代码。 4. **Foundation框架**:介绍Objective-C开发...
首先,"Programming In Objective-C.chm" 是一本关于Objective-C编程的电子书,可能涵盖了语言的基本语法、类和对象的概念、消息传递机制、内存管理(在Objective-C中是ARC,即自动引用计数)、类别、协议、 Blocks...
Objective-C是在C语言的基础上扩展了Smalltalk式的面向对象特性,使得它既有C语言的强大功能,又具备了面向对象编程的灵活性。 在Objective-C中,类是所有对象的基础。类定义了一组属性(实例变量)和方法(函数)...
Objective-C是Cocoa的主要编程语言,它扩展了C语言,引入了面向对象的特性,如消息传递和类别。 本书首先会引导读者了解Objective-C的基础,包括语法、类、对象以及内存管理。然后,它会深入Cocoa的核心组件,如...
Objective-C是一种面向对象的编程语言,它是C语言的扩展,最初由Brad Cox在20世纪80年代开发,并且广泛应用于Mac OS X和iOS的应用程序开发中。Objective-C在C语言的基础上增加了Smalltalk风格的消息传递机制,允许...
本书全面而系统地讲述Objective-C语言的基础知识和面向对象编程的重要概念,结合实例介绍了Cocoa工具包的优秀特性和其中的框架,以及继承、复合、源文件组织、内存管理、对象初始化和类别创建等众多重要的面向对象...
Objective-C2.0是苹果公司开发的一种面向对象的编程语言,它是C语言的超集,融合了Smalltalk的动态特性,广泛应用于iOS和Mac OS X操作系统。本资料集中的"Objective-C2.0程序设计习题官方答案"显然是针对学习...
Objective-C是一种面向对象的编程语言,它是在标准C语言的基础上发展起来的,并且完全兼容C语言。由于其面向对象的特性,Objective-C被广泛应用于苹果公司的iOS和OS X操作系统上的应用程序开发。 #### 二、...
Objective-C的起源可以追溯到C语言,它扩展了C的语法,加入了Smalltalk的面向对象特性。在Objective-C中,类是对象的蓝图,对象则是程序中的基本工作单元。理解类和对象的概念是学习Objective-C的第一步。 首先,你...
4. **Objective-C类别(Category)**:Objective-C允许通过类别添加方法到已存在的类,这是一种强大的代码复用和扩展机制。 5. ** Blocks和GCD**:Blocks是Objective-C中的匿名函数,常用于异步编程,与Grand ...
C语言是Objective-C的基础,掌握C语言对于学习Objective-C至关重要。本书的第一章《C, the Foundation of Objective-C》从C语言的基本概念出发,介绍了变量、数据类型、运算符、表达式、控制结构等基础知识,为后续...
Objective-C是一种主要应用于苹果操作系统上的编程语言,它是C语言的一种扩展,支持面向对象编程特性。Objective-C最初由Pike International公司的Brad Cox和Tom Love于1983年设计,并在1986年由NEXTSTEP系统引入。...
1. **Objective-C基础**:Objective-C是C语言的超集,它引入了Smalltalk的类、消息传递等面向对象特性。了解基本的数据类型、变量声明、控制流语句(如if、for、while)以及函数定义是开始的基础。 2. **类和对象**...
6. categories:Objective-C的类别机制允许向已存在的类添加新的方法,而无需修改原有代码,这是Objective-C的一个强大特性。 7. blocks:Blocks是Objective-C的匿名函数,可以捕获和存储当前作用域内的变量。它们...
- **Category(类别)**:Objective-C允许扩展已存在类的功能,无需创建子类。 - **Blocks(块)**:Objective-C引入了块的概念,类似于C++的lambda表达式,用于创建匿名函数。 - **GCD(Grand Central Dispatch...
- 它是 C 语言的超集,意味着所有合法的 C 代码都是 Objective-C 的一部分,同时增加了面向对象编程的特性,如类别(categories)、协议(protocols)和动态类型等。 - Objective-C 的核心是消息传递机制,类似于 ...
5. **分类和类别**:分类可以向已存在的类添加方法,而不会影响其原有结构,这是Objective-C特有的扩展机制。 6. **块(Blocks)**:Objective-C的块是内联函数,可以捕获并存储执行上下文,常用于异步操作和简化回...