首先应该明确的是类的声名、类别、类扩展及代理协议的表现形式:
1.
类的声名是最常见的,也就是对象头文件的:
@interface WebView : UIView
@end
2.
类别:有.h跟.m文件
在.h中的形式
@interface UILabel (AdjustWidth)
-(CGSize)AdjustWidth;
@end
3.
类扩展是一种特殊的类别,它一般定义在某对象的.m中,是对该对象的属性扩展。
一般用于给该对象添加一些私有的属性,
它是一种特殊的类别,省去了类别名、类别的.h和.m文件,而直接与需要扩展的对象共用一个.m文件。
@interface 某对象名 ()
@end
@implementation 某对象名——这里只是给读者指明类扩展的位置。
4.代理协议:
@protocol SFJTabBarDelegate<NSObject>
@optional
// 生成代理方法的声明,谁代理谁实现
- (void)tabBar:(SFJTabBar *)tabBar didClickBtn:(NSInteger)buttonIndex;
@end
5.类别、类扩展、代理协议的区别
类扩展是特殊的类别,是类别的一种,所有它具有类别的一切属性,但又有其特殊性;
分类一般只用来给对象添加方法,也可添加属性,添加的属性只有setter和getter方法的声名,而没有实现;
类扩展一般只用来给对象添加私有的属性,添加的属性有setter和getter方法的声名和实现。
代理协议由于它的委托功能,所以@protocol协议使用property也只会生成setter和getter方法的声明;