14. selector :见下图
15. @try{
}
@catch(NSException*exception){
}
@throw
16.初始化类,init***函数首先调用父类的init***方法(self = [super init***]),然后进行自己部分的初始化。一般不进行重载NSObject的alloc方法。
17. @protected,@private, @public, @package用于限定成员的使用范围,和C++类似。
18.文件模块的全局变量、静态变量和C++类似,用extern声明外部的全局变量,静态变量用static。实现多个模块之间共用或者限用某个变量。
19.和C++一样,变量前面可以增加存储类型符号:如auto,const,volatile,支持typedef
20.分类的概念:扩展类的功能,不能再分类中定义新的变量。
@interface Object1( Object2)
方法声明。。。
@end
@implement Object1(Object2)
具体实现。。。
@end
分类中谨慎使用覆盖原来类的方法,因为那样原方法不再能够使用;不必再分类中实现所有的方法,因为可以在分类中声明所有方法,在以后一段时间后实现它。使用分类方法后,会影响该类的所有子类。
21.协议:使用
@protocal protocalName
方法名 //必须实现
@optional
方法名 //可选
@end
某一个类实现了该协议:
@interface className: parentClassName<protocalName>
{
}
协议可以扩展:
@protocal extendedProtocal<protocalName>
@end
判断某个类是否遵循某个协议,利用if([currentObject conformsToProtocal@protocal(protocalName)] == yes) 或者利用编译器的警告功能:id<protocalName1, protocalName2> currentObject,这里定义了一个currentObject对象,该对象遵循协议protocalName1、protocalName2,如果在程序运行过程中,currentObject被附值一个对象,该对象没有实现该协议,就会有警告。
非正式协议:实际上是一个分类,也称为抽象协议,子类不一定要实现所有的方法。
22. 和C++一样,支持预处理指令
#define PI 3.1415927
#define str(x) #x
其中#表明要将功根据宏参数创建C风格的常量字符串,例如上面的例子,printf(str(xyz)); 等价于printf(“xyz”)
##表示两个标记连接在一起
#import 引入库
条件编译ifdef #endif #else #ifndef
#if #elif (不太一样)
defined(name)运算符判断是否已经定义
#undef name
23.基本的C语言特性:
数组:ClassName *arrayName[num];
函数,局部变量,静态变量,结构,指针等。