#import//不会重复引用头文件基础框架Foundation@interface, @implementationObjective-C C的超集OC被描述为盖在C语言上的薄薄一层,OC的原意就是C语言主体上加入面向对象的特性消息传递承自Smalltalk,OC里,与其说对象互相调用方法,不如说对象之间互相传递消息。与C++不同,OC中类别与消息关系比较松散。所有消息处理直到运行时才会动态决定,字符串NSString类提供了字符串的类包装,在字符串前加@,即为创建NSString类OC的类规格说明包含了两个部分,定义interface与实现implementation。类的实例(或者成员)变量声明在被大括号包含的代码块中。+表示类方法,-表示实例方法。实现区块则包含了公开方法的实现,以及定义私有变量和方法OC创建对象需要通过alloc和init两个消息,alloc的作用是分配内存,init则是初始化对象。MyObject* my = [[MyObject alloc] init];在OC2.0中,若创建对象不需要参数,可直接使用newMyObject* my = [MyObject new];方法属性暴露实例变量的类,可以用属性记号代替getter和setter语法。@interface Person:NSObject{@publicNSString * name;@privateInt age;}@property(copy) NSString* name;@property(readonly) int age;-(id)initWithAge:(int)age;@end@synthesize,@dynamic快速枚举For(Person* p in thePeople){}快速枚举可以比标准枚举产生更有效的代码。协议Protocol协议是一组没有实现的方法列表,任何的类均可采纳协议并具体实现这组方法。OC不支持多继承两种定义协议的方式,由编译器保证的正式协议,以及为特定目的设定的非正式协议。非正式协议为一个可选择性实现的一系列方法列表,由于正式协议引入@optional关键字,非正式协议已经废弃一个类可以在不声明匹配某个协议的情况下,实现该协议所包含的方法,也即实质上匹配这个协议。@protocol Locking- (void)lock;- (void)unlock;@end@interface SomeClass:SomeSuperClass@end动态类型在OC中,可以对id(很像void*,但被严格限制只能用在对象上)发送任何消息,编译器仅发出警告,可以编译通过,而实际发生的事则取决于运行期该对象的真正形态,若该对象的确可以回应消息,则依旧运行对应的方法。若无对应消息,抛出例外。-setMyValue:(id) foo;
转发
转发key用于简化特定的设计模式,例如观测器模式或代理模式。
转发方法
-(id)forward:(SEL) sel:(marg_list)args;
响应方法
-(id)performv:(SEL) sel:(marg_list) args;
SEL类型是OC中消息的类型。
类别Category
一个分类可以将方法的实现分解进一系列分离的文件中。程序员可以将一组相关的方法放进一个分类,使程序更具可读性。
分类中的方法是在运行时被加入类中的,这一特性允许程序员向现存的类中增加方法,而无需持有原有代码,或是重新编译原有的类。
运行时,分类中的方法与类原有方法并无区别,其代码可以访问包括私有类成员变量在内的所有成员变量。
分类不仅可以增加类的方法,也可以替代原有的方法。
垃圾收集