协议
协议是多个类共享的一个方法列。协议中列出的方法没有相应的实现,计划由其他人来实现。可以定义这些方法为必须实现的,也可以为可选择实现的
@protocal 协议名
//在此处添加必须实现的协议方法
@optional
//在此处添加可选择实现的协议方法
@end
遵循协议也符合继承关系。父类遵循了某项协议,则子类也同样遵循
协议不引用任何类,它是无类的。任何类都可以遵循某项协议。
//是否遵循某项协议
- (BOOL)conformsToProtocol:(Protocol *)aProtocol;
//是否实现了某个方法
- (BOOL)respondsToSelector:(SEL)aSelector;
协议也可以扩展
//表明Drawing3D协议也采用了Drawing协议,任何采用Drawing3D协议的类都必须实现此协议列出的方法,以及Drawing协议列出的方法
@protocal Drawing3D <Drawing>
分类也可以采用协议
//Fraction类的分类stuff遵循NSCopying和NSCoding协议
@interface Fraction (stuff)<NSCopying,NSCoding>
如果不想在.h文件中公开声明你的类符合特定协议,可以将协议像分类扩展一样写在.m中
@interface ClassA ()<Drawing>
@end
代理
定义了协议的类,可以看作是,将协议定义的方法代理给了实现它们的类。具体的动作由代理类承担。
合成对象
即一个类包含一个或多个其他类的对象
@interface Square:NSObject
{
Rectangle *rect;
}
- (int)setSide:(int)s;
- (int)side;
- (int)area;
- (int)perimeter;
预定义的值,本身也可以引用另一个预定义的值
条件编译
Blocks(块)
在block内部无法直接修改block外部定义的变量值。需要在其前面加上修饰符_ _block
NSInteger不是对象,而是基本数据类型(64位的long和32位的int)的typedef
description方法
通过覆写description方法,可以使用格式化字符显示自己的类对象。如果不覆写,NSlog
仅仅显示类名和该对象在内存中的地址。这是从NSobject类继承的description方法的默认实现。
NSValue类,将结构转化为对象(如CGPoint,CGSize)