因为 Objective-C是C语言的母集合, 所以 .h 和 .m 文件支持OC和C的混编.
.mm 文件还支持C++混编, 就也就是 .m 和 .mm 的区别.
双引号 : 编译器会现在 当前项目下 查找文件, 没找到, 再到 资源库 中查找; 尖括号 : 编译器会先在 资源库 中查找文件, 没找到, 再到 当前项目下 查找文件.
当你在头文件声明某种类型的变量的时候, 这个时候你并不需要知道这个类型的具体内容, 你只需要告知 编译器 你有这个类型就行了.
在 .m文件 中再用 “#import” 去引入这个类型的 .h文件
这么做的好处是, 加快编译速度, 减少重复导入的次数
(以”@”开头, @代表“Objective-C”的标志,证明您正在使用objective-c语言) 类名 : 父类名 (类别) <协议>
// 类名 : 父类名 (类别) <协议> @interface CNMe : CNFa (CNBig) < CNMeDelegate >
成员变量 必须在类里面声明成员变量名,以下划线”_”开头 // .h 头文件 @interface A : NSObject { NSInteger _intA; NSString *_strA; } @end 属性@property (参数) 类型 变量名;
/* .h 头文件 */ @interface A : NSObject { NSInteger _intA; } // 以"@"开头, @代表“Objective-C”的标志,证明您正在使用objective-c语言 @property (nonatomic, strong) NSInteger intA; @end /* .m 实例文件 */ @implementation A @end2. 跟 getter / setter 有关的参数
参数名效果getter=给属性的getter方法重命名setter=给属性的setter方法重命名协议名 < 父协议 > 协议 可以在 协议 之间继承, 每一个 协议 都必须是 < NSObject > 协议 的 子协议;
@protocol CNMeDelegate <NSObject> /* 协议里面只能定义方法, 类似 Java 里的 接口 */ @end类名 (类别名) .h文件
@interface CNMe (CNBig) /* 类别 只能为指定的 类 添加方法, 可以添加 类方法 和 实例方法, 但是有的高手会利用 OC 里的 <objc/runtime.h> 的 "运行时" 机制, 实现用 类别 向 类 里添加 属性. */ // 这里是在 为 CNMe类 添加 方法的声明. @end.m文件
@implementation CNMe (CNBig) // 这里是在 为 CNMe类 添加 方法的实现. @end类名 () 类扩展,看上去像没有 类别名 的 类别, 但实际用途, 更多的是放在.m文件中, 并且放在 @implementation 上面, 起到声明 私有属性, 私有方法 的作用
@interface CNMe () /* 将 类扩展 放入对应的 类 的 类的实现 上面, 扩展该 类 的 私有属性, 私有成员变量, 私有方法 */ @end @implementation CNMe @end