分组导航

实现在同一个文件中,代码的快速定位。有如下代码文件:

  1. //
  2. // main.m
  3. // GroupNavigationMark 分组导航标记
  4. //
  5. // Created by ZhaiKun on 2017/10/9.
  6. // Copyright © 2017年 ZhaiKun. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. @interface Person : NSObject
  10. @end
  11. @implementation Person
  12. @end
  13. @interface Students : NSObject
  14. @end
  15. @implementation Students
  16. @end
  17. @interface Bird : NSObject
  18. - (void)fly;
  19. @end
  20. @implementation Bird
  21. -(void)fly{
  22. NSLog(@"我会飞");
  23. }
  24. @end
  25. @interface Cat : NSObject
  26. @end
  27. @implementation Cat
  28. @end
  29. @interface Apple : NSObject
  30. - (void)red;
  31. @end
  32. @implementation Apple
  33. -(void)red{
  34. NSLog(@"我是红色的");
  35. }
  36. @end
  37. @interface Bananer : NSObject
  38. @end
  39. @implementation Bananer
  40. @end
  41. int main(int argc, const char * argv[]) {
  42. @autoreleasepool {
  43. // insert code here...
  44. NSLog(@"Hello, World!");
  45. }
  46. return 0;
  47. }

如果文件中的代码不断的增加,那么在查找文件中的某一个类或者方法等就没有那么方便了。在文件的顶部,有一个文件的导航:
image.png
点击No Selection,显示当前文件中相关的类、方法等,可快速定位
image.png
为分组栏添加标记,使用#pragma mark x 语法,根据需求增加代码即可
image.png
小编在此处将代码做如下修改

  1. //
  2. // main.m
  3. // GroupNavigationMark 分组导航标记
  4. //
  5. // Created by ZhaiKun on 2017/10/9.
  6. // Copyright © 2017年 ZhaiKun. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #pragma mark - 人类
  10. @interface Person : NSObject
  11. @end
  12. @implementation Person
  13. @end
  14. @interface Students : NSObject
  15. @end
  16. @implementation Students
  17. @end
  18. #pragma mark - 动物类
  19. @interface Bird : NSObject
  20. - (void)fly;
  21. @end
  22. @implementation Bird
  23. -(void)fly{
  24. NSLog(@"我会飞");
  25. }
  26. @end
  27. @interface Cat : NSObject
  28. @end
  29. @implementation Cat
  30. @end
  31. #pragma mark - 食物类
  32. @interface Apple : NSObject
  33. - (void)red;
  34. @end
  35. @implementation Apple
  36. -(void)red{
  37. NSLog(@"我是红色的");
  38. }
  39. @end
  40. @interface Bananer : NSObject
  41. @end
  42. @implementation Bananer
  43. @end
  44. #pragma mark - 程序入口函数
  45. int main(int argc, const char * argv[]) {
  46. @autoreleasepool {
  47. // insert code here...
  48. NSLog(@"Hello, World!");
  49. }
  50. return 0;
  51. }

实现效果
image.png

你可能会忘记的小细节

  1. 类的声明@interface与类的实现@implementation不能嵌套使用
  2. 类必须先声明再实现
  3. 类的声明与实现必须同时存在。特殊情况下,可以没有声明,而只有实现,但不推荐这种写法
  4. 类的声明必须放在使用该类的语法的前面,类的实现可以放在使用该类的语法的前面或后面
  5. 属性名以下划线开头,类名首字母大写(规范)
  6. 属性不允许声明时初始化
  7. OC方法必须通过创建对象,由对象来进行调用;函数是可以直接调用的
  8. 方法只有声明没有实现,运行是会报错的

    将类写在一个模块中,便于代码的维护、团队开发

    一个模块,至少包含两个文件:
  • .h 头文件 写类的声明
  • .m 实现文件 写类的实现

在模块文件夹下新建文件
image.png
创建一个新的Cocoa Class文件
image.png
系统会默认建立.h和.m模板文件
image.png
.h 头文件默认代码

  1. //
  2. // Person.h
  3. // MyObjective-C
  4. //
  5. // Created by ZhaiKun on 2017/10/10.
  6. // Copyright © 2017年 ZhaiKun. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. @interface Person : NSObject
  10. @end

.m 类的实现文件默认代码

  1. //
  2. // Person.m
  3. // MyObjective-C
  4. //
  5. // Created by ZhaiKun on 2017/10/10.
  6. // Copyright © 2017年 ZhaiKun. All rights reserved.
  7. //
  8. #import "Person.h"
  9. @implementation Person
  10. @end

修改.h头文件中的代码

  1. //
  2. // Person.h
  3. // MyObjective-C
  4. //
  5. // Created by ZhaiKun on 2017/10/10.
  6. // Copyright © 2017年 ZhaiKun. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. @interface Person : NSObject
  10. {
  11. @public
  12. NSString *_name;
  13. int _age;
  14. }
  15. - (void)run;
  16. @end

再修改.m类实现文件中的代码

  1. //
  2. // Person.m
  3. // MyObjective-C
  4. //
  5. // Created by ZhaiKun on 2017/10/10.
  6. // Copyright © 2017年 ZhaiKun. All rights reserved.
  7. //
  8. #import "Person.h"
  9. @implementation Person
  10. - (void)run{
  11. NSLog(@"我跑的很快、、、");
  12. }
  13. @end

在程序的入口函数main.m文件中进行调用

  1. //
  2. // main.m
  3. // ClassModuleDevelop 类的模块开发演示
  4. //
  5. // Created by ZhaiKun on 2017/10/10.
  6. // Copyright © 2017年 ZhaiKun. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import "Person.h"//导入头文件,使用文件中的类
  10. int main(int argc, const char * argv[]) {
  11. @autoreleasepool {
  12. // insert code here...
  13. Person *person = [Person new];
  14. [person run];
  15. }
  16. return 0;
  17. }

建议在.h头文件中只写一个类的声明,.m文件只写一个类的实现