摘要: Java接口与Objective-C正式协议类似,因为它们都需要实现一组方法。Java具有抽象类,但Objective-C没有。Java具有类变量,但在Objective-C中,可以使用文件范围内的全局变量并为它们提供对应的访问器。Objective-C的公共和私有方法的形式比较松散。我们已经说过,在Objective-C中,对象支持的任何方法都可以被调用,即使它们没有以任何外部形式出现。Java允许声明final类,阻止更改其中的任何子类。而Objective-C则与此相反,允许在运行时向任何类添加方法。通常,Objective-C中类的实现方式可以分成两个文件:头文件和自身的实现文件。但并 阅读全文
posted @ 2012-10-15 15:13 TQ.CH 阅读(238) 评论(0) 推荐(0) 编辑
摘要: Cocoa提供了一个名为NSPredicate的类,它用于指定过滤器的条件。可以创建NSPredicate对象,通过该对象准确地描述所需的条件,对每个对象通过谓词进行筛选,判断它们是否与条件相匹配。这里的“谓词”通常用在数学和计算机科学概念中,表示计算真值或假值的函数。Cocoa用NSPredicate描述查询的方式,原理类似于在数据库中进行查询。可以在数据库风格的API中使用NSPredicate,例如Core Data 和 Spotlight。可以将NSPredicate看成另一种间接操作方式。例如,如果需要查询满足条件的机器人,可以使用谓词对象进行检查,而不必使用代码进行显式查询。通过交 阅读全文
posted @ 2012-10-15 14:48 TQ.CH 阅读(643) 评论(0) 推荐(0) 编辑
摘要: 现在回过头来看一下间接机制。许多编程技术都基于间接机制,包括整个面向对象编程领域。本章将介绍另一种间接机制,这种机制不属于Objective-C语言的特性,而是Cocoa提供的一种特性。到目前为止,我们已经介绍了通过直接调用方法、属性的点表示法或设置实例变量来直接更改对象状态。许多人将键/值编码亲切地称为KVC,它是一种间接更改对象状态的方式,其实现方法是使用字符串描述要更改的对象状态部分。一些更高级的Cocoa特性,例如Core Data 和Cocoa Bindings,在基础机制中包含了KVC。KVC简介键/值编码中的基本调用包括-valueForKey:和-setValue:forKey 阅读全文
posted @ 2012-10-15 12:05 TQ.CH 阅读(406) 评论(0) 推荐(0) 编辑
摘要: Cocoa提供了两个通用的文件处理类:属性列表和对象编码。属性列表在Cocoa中,有一类名为属性列表的对象,常简写为plist。这些列表包含Cocoa知道如何操作的一组对象。具体来讲,Cocoa知道如何将它们保存到文件中并进行加载。属性列表类包括NSArray、NSDictionary、NSString、NSNumber、NSDate和NSData,以及它们的变体。NSDate程序中经常要处理时间和日期。NSDate是Cocoa中用于处理时间和日期的基础类。可以使用[NSDate date]获取当前的日期和时间,它是一个自动释放对象。NSDate *date = [NSDate date];N 阅读全文
posted @ 2012-10-15 10:48 TQ.CH 阅读(583) 评论(0) 推荐(0) 编辑
摘要: 正式协议与非正式协议一样,正式协议是一个命名的方法列表。但与非正式协议不同的是,正式协议要求显式地采用协议。采用协议的办法是在类的@interface声明中列出协议的名称。此时,你的类遵守该协议。采用协议意味着你承诺实现该协议的所有方法。否则,编译器会通过生成警告来提醒你。正式协议就像Java的接口一样。事实上,Objective-C的协议正是受了Java接口的启发。声明协议下面我们看由Cocoa声明的一个协议--NSCopying。如果你采用了NSCopying协议,你的对象将知道如何复制自己:@protocol NSCopying- (id) copyWithZone:(NSZone *) 阅读全文
posted @ 2012-10-15 10:07 TQ.CH 阅读(394) 评论(0) 推荐(0) 编辑
摘要: 创建类别类别是一种为现有的类添加新方法的方式。可以为任何类添加新的方法,包括那些你没有源代码的类。模拟:你正在编写一个纵横字谜游戏程序,该程序将接收一系列的字符串,确定每个字符串的长度并将这些字符串的长度存入NSArray或NSDictionary中。你需要先将每个长度包装在一个NSNumber对象中,然后才能将期存入NSArray或NSDictionary中。做多了就会厌烦了吧。相反,你可以为NSString类添加一个类别,该类别可以替你完成这项工作。声明类别类别的声明格式与类的声明格式相似:@interface NSString (NumberConvenience)-(NSString 阅读全文
posted @ 2012-10-15 09:08 TQ.CH 阅读(312) 评论(0) 推荐(0) 编辑
摘要: Objective-C2.0中引入了特性(property),它组合了新的预编译指令和新的属性访问器语法。新的特性功能显著减少了必须编写的冗长代码的数量。Objective-C的特性只适用于Leopard或更高版本。特性主要应用于Cocoa的新组件(尤其是华丽夺目的Core Animation效果)。@property是一种新的编译器功能,表示声明了一个新对象的属性。@property float rainHanding;语句表明这是具有float类型的属性,其名称为rainHanding。而且,你可以通过调用-setRainHanding:来设置属性,通过调用-rainHanding来访问属 阅读全文
posted @ 2012-10-15 09:07 TQ.CH 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 目前为止,两种创建新对象的两种方法:第一种是[类名 new],第二种是[[类名 alloc] init]。这两种方法是等价的,不过,通常的Cocoa惯例是使用alloc和init,而不使用new。分配对象分配(allocation)是一个新对象诞生的过程。从操作系统获得一块内存并将其指定为存放对象的实例变量的位置。向某个类发送alloc消息的结果,就是为该类分配一块足够大的内存,以存放该类的全部实例变量。同时,alloc方法还顺便将这块内存区域全部初始化为0。同于未初始化内存而引起的各种各样的随机bug曾经折磨着许多放言,而alloc方法将分配的内存初始化为0,这样就不用担心此类问题了。所有的 阅读全文
posted @ 2012-10-15 09:04 TQ.CH 阅读(224) 评论(0) 推荐(0) 编辑