随笔分类 - Objective-C
摘要:Java接口与Objective-C正式协议类似,因为它们都需要实现一组方法。Java具有抽象类,但Objective-C没有。Java具有类变量,但在Objective-C中,可以使用文件范围内的全局变量并为它们提供对应的访问器。Objective-C的公共和私有方法的形式比较松散。我们已经说过,在Objective-C中,对象支持的任何方法都可以被调用,即使它们没有以任何外部形式出现。Java允许声明final类,阻止更改其中的任何子类。而Objective-C则与此相反,允许在运行时向任何类添加方法。通常,Objective-C中类的实现方式可以分成两个文件:头文件和自身的实现文件。但并
阅读全文
摘要:Cocoa提供了一个名为NSPredicate的类,它用于指定过滤器的条件。可以创建NSPredicate对象,通过该对象准确地描述所需的条件,对每个对象通过谓词进行筛选,判断它们是否与条件相匹配。这里的“谓词”通常用在数学和计算机科学概念中,表示计算真值或假值的函数。Cocoa用NSPredicate描述查询的方式,原理类似于在数据库中进行查询。可以在数据库风格的API中使用NSPredicate,例如Core Data 和 Spotlight。可以将NSPredicate看成另一种间接操作方式。例如,如果需要查询满足条件的机器人,可以使用谓词对象进行检查,而不必使用代码进行显式查询。通过交
阅读全文
摘要:现在回过头来看一下间接机制。许多编程技术都基于间接机制,包括整个面向对象编程领域。本章将介绍另一种间接机制,这种机制不属于Objective-C语言的特性,而是Cocoa提供的一种特性。到目前为止,我们已经介绍了通过直接调用方法、属性的点表示法或设置实例变量来直接更改对象状态。许多人将键/值编码亲切地称为KVC,它是一种间接更改对象状态的方式,其实现方法是使用字符串描述要更改的对象状态部分。一些更高级的Cocoa特性,例如Core Data 和Cocoa Bindings,在基础机制中包含了KVC。KVC简介键/值编码中的基本调用包括-valueForKey:和-setValue:forKey
阅读全文
摘要:Cocoa提供了两个通用的文件处理类:属性列表和对象编码。属性列表在Cocoa中,有一类名为属性列表的对象,常简写为plist。这些列表包含Cocoa知道如何操作的一组对象。具体来讲,Cocoa知道如何将它们保存到文件中并进行加载。属性列表类包括NSArray、NSDictionary、NSString、NSNumber、NSDate和NSData,以及它们的变体。NSDate程序中经常要处理时间和日期。NSDate是Cocoa中用于处理时间和日期的基础类。可以使用[NSDate date]获取当前的日期和时间,它是一个自动释放对象。NSDate *date = [NSDate date];N
阅读全文
摘要:正式协议与非正式协议一样,正式协议是一个命名的方法列表。但与非正式协议不同的是,正式协议要求显式地采用协议。采用协议的办法是在类的@interface声明中列出协议的名称。此时,你的类遵守该协议。采用协议意味着你承诺实现该协议的所有方法。否则,编译器会通过生成警告来提醒你。正式协议就像Java的接口一样。事实上,Objective-C的协议正是受了Java接口的启发。声明协议下面我们看由Cocoa声明的一个协议--NSCopying。如果你采用了NSCopying协议,你的对象将知道如何复制自己:@protocol NSCopying- (id) copyWithZone:(NSZone *)
阅读全文
摘要:创建类别类别是一种为现有的类添加新方法的方式。可以为任何类添加新的方法,包括那些你没有源代码的类。模拟:你正在编写一个纵横字谜游戏程序,该程序将接收一系列的字符串,确定每个字符串的长度并将这些字符串的长度存入NSArray或NSDictionary中。你需要先将每个长度包装在一个NSNumber对象中,然后才能将期存入NSArray或NSDictionary中。做多了就会厌烦了吧。相反,你可以为NSString类添加一个类别,该类别可以替你完成这项工作。声明类别类别的声明格式与类的声明格式相似:@interface NSString (NumberConvenience)-(NSString
阅读全文
摘要:Objective-C2.0中引入了特性(property),它组合了新的预编译指令和新的属性访问器语法。新的特性功能显著减少了必须编写的冗长代码的数量。Objective-C的特性只适用于Leopard或更高版本。特性主要应用于Cocoa的新组件(尤其是华丽夺目的Core Animation效果)。@property是一种新的编译器功能,表示声明了一个新对象的属性。@property float rainHanding;语句表明这是具有float类型的属性,其名称为rainHanding。而且,你可以通过调用-setRainHanding:来设置属性,通过调用-rainHanding来访问属
阅读全文
摘要:目前为止,两种创建新对象的两种方法:第一种是[类名 new],第二种是[[类名 alloc] init]。这两种方法是等价的,不过,通常的Cocoa惯例是使用alloc和init,而不使用new。分配对象分配(allocation)是一个新对象诞生的过程。从操作系统获得一块内存并将其指定为存放对象的实例变量的位置。向某个类发送alloc消息的结果,就是为该类分配一块足够大的内存,以存放该类的全部实例变量。同时,alloc方法还顺便将这块内存区域全部初始化为0。同于未初始化内存而引起的各种各样的随机bug曾经折磨着许多放言,而alloc方法将分配的内存初始化为0,这样就不用担心此类问题了。所有的
阅读全文
摘要:每个对象都维护一个保留计数器。对象被创建时,其保留计数器值1;对象被保留时,保留计数器值加1;对象被释放时,保留计数器值减1;当保留计数器值归0时,对象被销毁。在销毁对象时,首先调用对象的dealloc方法,然后回收其占用的内存以供其它对象使用。当对象接收一条autorealse消息时,其保留计数器并不立即改变。相反,该对象只被放入NSAutoreleasePool中。当自动释放池被销毁时,会向池中的所有对象发送release消息,所有被自动释放的对象都将其保留计数器值减1。如果保留计数器值归0,则对象被销毁。当使用AppKit时,Objective-C会在适当的时间为你创建和销毁自动释放池,
阅读全文
摘要:Foundation框架只是Cocoa的一部分。Cocoa Foundataion框架中有很多有用的、面向数据的低级类和数据类型,例如NSString、NSArray、NSEnumerator和NSNumber。Foundation框架拥有100多个类。一些有用的数据类型范围的作用 NSRangetypedef struct _NSRange{unsigned int location;unsigned int length;} NSRange;这个结构体用来表示相关事物的范围,通常是字符串里的字符范围或者数组里的元素范围。location字段存在该范围的起始位置,而length字段则是该范围
阅读全文
摘要:1. 文件CMD + N: 新文件CMD + SHIFT + N: 新项目CMD + O: 打开CMD + S: 保存CMD + SHIFT + S: 另存为CMD + W: 关闭窗口CMD + SHIFT + W: 关闭文件2. 编辑CMD + [: 左缩进CMD + ]: 右缩进CMD + CTRL + LEFT: 折叠CMD + CTRL + RIGHT: 取消折叠CMD + CTRL + TOP: 折叠全部函数CMD + CTRL + BOTTOM: 取消全部函数折叠CTRL + U: 取消全部折叠CMD + D: 添加书签CMD + /: 注释或取消注释CTRL + .: 参数提示E
阅读全文
摘要:Objective-C类的源代码由两部分组成。一部分是的接口(interface),用来提供类的公共描述。接口包含了所有使用该类所需的信息。编译器编译@interface部分后,就能够使用该类的对象,调用类方法,将对象复合到其它类中和创建子类。另一部分是实现(implementation)。@implementation部分告诉Objective-C编译器如何让该类工作。这部分代码实现了的接口中声明的方法。类的代码通常放在两个文件里。一个文件存放接口部分的代码:类的@interface指令、公共struct定义、enum常量、#defines和extern全局变量等。由于Objective-C
阅读全文
摘要:使用复合可组合多个对象,使之分工协作。在实际的过程中,会用到同时使用继承和复合来创建自己的类。编程中的复合就好像音乐中的作曲一样:将多个组件组合在一起配合使用,从而得到完整的作品。在软件开发中,可能会用一个Pedal(脚踏板)和一个Tire(轮胎)对象组合出虚拟的独轮车。在Objective-C中,复合是通过包含作为实例变量的对象指针实现的。严格的讲,只有对象间的组合才能叫复合。诸如int,float,enum和struct等基本类型都被认为是对象的一部分。自定义NSLog()通过NSLog()可以使用%@格式说明符来输出对象,在类中添加description方法就可以自定义NSLog()如何
阅读全文
摘要:编写面向对象的程序时,所创建的类和对象之间存在一定的关系。它们协同工作才能实现程序相应的功能。处理类和对象间的关系时,尤其要重视OOP的两个方面。第一方面是继承。创建一个新类时,通常需要定义新类以区别于其它类及现有类。使用继承可以定义具有父类所有功能的新类,它继承了父类的这些功能。另一个和类有关的OOP技术是复合(composition)。在复合中,对象可以引用其它对象。例如,游戏过程中,赛车模拟程序中的汽车对象有4个轮胎对象。对象引用其它对象时,可以利用其它对象提供的特性,这就是复合。为何使用继承对于一些类接口非常类似,含有大量的重复的内容,会影响程序的执行效率。进行编程时,出现这样的重复内
阅读全文
摘要:面向对象编程:Object-Oriented Programming(OOP),是一种编程技术。简化某些编程任务,也能使编程变得更有趣。Cocoa基于OOP概念,并且Objective-C是一种面向对象的语言。间接编程行业有句老话,大意是:“只要多添加一个间接层,计算机科学中就没有解决不了的问题。”间接这个词的含义很简单--不在代码中直接使用某个值,而是使用指向该值的指针。间接的应用变量文件-告诉我们从哪里获得需要的数据。参数面向对象编程过程式编程建立在函数之上,数据为函数服务。面向对象编程从相反的角度来看待问题,它以程序的数据为中心,函数为数据服务。在OOP中,不再重点关注程序中的函数,而是
阅读全文
摘要:Objective-C只不过是拥有一些附加特性的C语言。智能提示快捷键:Esc。.m扩展名表示文件包含Objective-C代码,应由Objective-C编译器处理。在Xcode中,所有这些编译工作全由GCC(GNU Compiler Collection,GNU编译器集合)处理。C编译器处理名称以.c结尾的文件,而C++编译器处理.cpp文件。#import和C语言一样,Objective-C使用头文件来包含元素声明,这些元素包含结构体、符号常量、函数原型等。C语言使用#include语句通知编译器应在头文件中查询定义。在Objective-C中也可以使用#include来实现这个目的。#
阅读全文
摘要:Objective-C:Objective-C语言是C语言的一个扩展集,许多具备Mac OS X外观的应用程序都是使用该语言开发的。其以C语言为基础,在C语言中添加了一些微妙但意义重大的特性。Cocoa:苹果公司提供的开发工具包。Cocoa是使用Objective-C编写的,它不仅包含Mac OS X 用户界面的所有元素,还包含其它许多内容。Cocoa的前身是NextSTEP,1985年Steve Jobs成立了NeXT公司,选择Unix作为其操作系统,创建了NextSTEP(使用Objective-C开发的一款强大的用户界面工具包)。1996年NeXT被苹果公司收购,NextSTEP被重命名
阅读全文
摘要:子龙山人Learning,Sharing,Improving!(译)Object-C中的内存管理原文链接地址:http://www.raywenderlich.com/2657/memory-management-in-objective-c-tutorial 免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系。谢谢合作! 注:本教程由北方和我本人合作翻译。教程截图: 当我检查其他开发人员的代码时,似乎最常见的错误总是围绕在以Object-C中的内存...
阅读全文
摘要:#include 区分 #include <x.h>与#include "x.h"的作用#include <x.h>:它用于对系统自带的头文件的引用,编译器会在系统文件目录下去查找该文件.#include "x.h":用户自定义的文件用双引号引用,编译器首先会在用户目录下查找,然后到安装目录中查找,最后在系统文件中查找。 在使用#include的时候要注意处理重复引用(这也是objc中#include与#import的区别) 例如:ClassA 与 ClassB同时引用了ClassC,不做重复引用处理的时候在ClassD中同时引用
阅读全文

浙公网安备 33010602011771号