objective-C基础

objective-C特性:

动态绑定

在多数面向对象编程语言中,调用方法是由直接调用内存中一段固定的代码实现的。由于这种方法需要预定义的处理命令的类,因而限制了程序的设计,通常采用责任链模式作为其设计模式。虽然Cocoa在多数地方仍然采用这种方式,但通过Objective-C的动态绑定特性增加了更多设计的自由性。

Objective-C中,消息由selector所代表,其为描述需要调用的方法的一个字符串。在发送消息时,该selector被送入Objective-C运行时中,在可用方法列表中寻找对应的方法,然后调用该方法的实际实现。由于selector只是文本数据,因此它可以保存在文件中,通过网络或在进程间传输,或以其它方式进行操作。方法的实现是在运行时查找的,而非编译时。这样的做法会造成一些性能损失,但动态绑定允许相同的selector代表不同的实现。

利用这些特性,Cocoa提供了一种通用的数据管理技术,称为-值编码KVC)。这种技术允许对象的数据或属性可以在运行时通过其键名进行查找,其中,属性的名称即为其值的键名。在静态语言中,这样的做法是不可能的。KVC大大的增加了设计的自由度:通过KVC,无需知道对象的类型即可访问其属性或数据。另外,利用--观测器KVO)技术和NSUndoManager类,可以提供自动的撤销/重做支持。

 

内存管理

Cocoa环境的一个特点是它可以管理动态分配的内存。Cocoa中绝大部分类的基类都是NSObject,它实现了引用计数的内存管理模型。从NSObject继承的类可以响应retainrelease消息,以增减其引用计数;也可以通过发送retainCount消息来获取其引用计数。一个以alloccopyObjective-C 2.0中增加的new所创建的对象的引用计数1;向对象发送retain消息会将计数加1,而发送release消息则会将计数减1。若对象的引用计数减少到了0,则它会被销毁。dealloc消息类似于C++中的析构函数,在对象被销毁之前可能会被调用,但系统不保证会发送该消息。这种引用计数的模型与微软的COM中的IUnknown接口特性十分相似,它提供了AddRefRelease接口,与retainrelease对应。

Objective-C 2.0开始,Objective-C运行时实现了可选的垃圾收集器。若垃圾收集的特性被激活,则运行时会将引用计数相关的操作,例如“retain”“release”,变为无操作。iOS上的Objective-C 2.0实现中不包含垃圾收集器。垃圾收集器运行在一个低优先级的后台线程中,并可以在用户动作时暂停,从而保持良好的用户体验。

 

主要框架

Cocoa包含两个主要的Objective-C对象库,称为框架。框架的功能类似于动态库,即可以在运行时动态的载入应用程序的地址空间,但框架作为一个捆绑 (计算机)而非独立文件,其中除了可执行代码外,也包含了资源,头文件和文档。

“Foundation工具包,或简称为“Foundation”,首先出现在OpenStep中。在Mac OS X中,它是基于Core Foundation的。作为通用的面向对象的函数库,Foundation提供了字符串,数值的管理,容器及其枚举,分布式计算,事件循环,以及一些其它的与图形用户界面没有直接关系的功能。其中用于类和常数的“NS”前缀来自于Cocoa的来源,NeXTSTEP。它可以在Mac OS XiOS中使用。

应用程序工具包,或称AppKitApplication Kit)是直接衍生自NeXTSTEPAppKit的。它包含了程序与图形用户界面交互所需的代码。它是基于Foundation建立的,也使用“NS”前缀。它只能在Mac OS X中使用。

用户界面工具包,或称UIKitUser Interface Kit),是用于iOS图形用户界面工具包。与AppKit不同,它使用“UI”的前缀。

Cocoa构架的一个关键部分是其多样的视图模型。总体而言,它是基于由Quartz提供的PDF绘制模型的,该特性允许使用PostScript绘制自定义图形内容,同时也自动的支持了打印机以及类似设备。由于Cocoa框架管理了全部的绘图操作,例如裁剪,滚动,缩放等,程序员可以不再重复实现基础的功能,而可以集中于提供程序的关键功能上。

 

1。

#import 可以方式头文件重用

 

#include则需要这样那个写来防止头文件重用

{

#ifndef ATTACKPATH_H

#define ATTACKPATH_H

。。。。。

#endif

}

 

2

Objective-C中看到@符号,你就可以把它看成C语言的扩展。

 

3。

凡是继承自NSObject类的对象都可以用retain和release。

 

4。

-(void)function; 前面的短线代表了Objective-C方法的声明。

如果函数有参数则要加冒号 比如:-(void)function:(int)parameter

 

5.

类声明@interface用与定义类的公共接口

@interface HomeViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,LetterIndexViewDelegate,UIScrollViewDelegate>

{

    IBOutlet UIButton* _seniorSearchBtn;

    NSMutableArray* _letterArray;

    BOOL _isTableViewOnToped;    

}

-(IBAction)seniorSearchAction;

-(void)loadData;

 

@end 

////

 

@implementation是一个编译器指令,表明你将为某个类提供代码。

@implementation HomeViewController

……..

@end

 

posted @ 2013-01-21 11:00  六界剑仙  阅读(179)  评论(0)    收藏  举报