1、分组导航

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

//
// main.m
// GroupNavigationMark 分组导航标记
//
// Created by ZhaiKun on 2017/10/9.
// Copyright © 2017年 ZhaiKun. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Person : NSObject

@end

@implementation Person

@end

@interface Students : NSObject

@end

@implementation Students

@end

@interface Bird : NSObject

- (void)fly;

@end

@implementation Bird

-(void)fly{
NSLog(@"我会飞");
}

@end

@interface Cat : NSObject

@end

@implementation Cat

@end

@interface Apple : NSObject

- (void)red;

@end

@implementation Apple

-(void)red{
NSLog(@"我是红色的");
}

@end

@interface Bananer : NSObject

@end

@implementation Bananer

@end

int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
}
return 0;
}

如果文件中的代码不断的增加,那么在查找文件中的某一个类或者方法等就没有那么方便了。在文件的顶部,有一个文件的导航:

点击No Selection,显示当前文件中相关的类、方法等,可快速定位

为分组栏添加标记,使用#pragma mark x 语法,根据需求增加代码即可

小编在此处将代码做如下修改

//
// main.m
// GroupNavigationMark 分组导航标记
//
// Created by ZhaiKun on 2017/10/9.
// Copyright © 2017年 ZhaiKun. All rights reserved.
//

#import <Foundation/Foundation.h>

#pragma mark - 人类
@interface Person : NSObject

@end

@implementation Person

@end

@interface Students : NSObject

@end

@implementation Students

@end

#pragma mark - 动物类
@interface Bird : NSObject

- (void)fly;

@end

@implementation Bird

-(void)fly{
NSLog(@"我会飞");
}

@end

@interface Cat : NSObject

@end

@implementation Cat

@end

#pragma mark - 食物类
@interface Apple : NSObject

- (void)red;

@end

@implementation Apple

-(void)red{
NSLog(@"我是红色的");
}

@end

@interface Bananer : NSObject

@end

@implementation Bananer

@end

#pragma mark - 程序入口函数
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
}
return 0;
}

实现效果

2、牛逼哄哄的你可能会忘记的小细节

2.1 类的声明@interface与类的实现@implementation不能嵌套使用

2.2 类必须先声明再实现

2.3 类的声明与实现必须同时存在。特殊情况下,可以没有声明,而只有实现,但不推荐这种写法

2.4 类的声明必须放在使用该类的语法的前面,类的实现可以放在使用该类的语法的前面或后面

2.5 属性名以下划线开头,类名首字母大写(规范)

2.6 属性不允许声明时初始化

2.7 OC方法必须通过创建对象,由对象来进行调用;函数是可以直接调用的

2.8 方法只有声明没有实现,运行是会报错的

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

一个模块,至少包含两个文件:

.h 头文件 写类的声明

.m 实现文件 写类的实现

在模块文件夹下新建文件

创建一个新的Cocoa Class文件

系统会默认建立.h和.m模板文件

.h 头文件默认代码

//
// Person.h
// MyObjective-C
//
// Created by ZhaiKun on 2017/10/10.
// Copyright © 2017年 ZhaiKun. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Person : NSObject

@end

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

//
// Person.m
// MyObjective-C
//
// Created by ZhaiKun on 2017/10/10.
// Copyright © 2017年 ZhaiKun. All rights reserved.
//

#import "Person.h"

@implementation Person

@end

修改.h头文件中的代码

//
// Person.h
// MyObjective-C
//
// Created by ZhaiKun on 2017/10/10.
// Copyright © 2017年 ZhaiKun. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
@public
NSString *_name;
int _age;
}

- (void)run;

@end

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

//
// Person.m
// MyObjective-C
//
// Created by ZhaiKun on 2017/10/10.
// Copyright © 2017年 ZhaiKun. All rights reserved.
//

#import "Person.h"

@implementation Person

- (void)run{
NSLog(@"我跑的很快、、、");
}

@end

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

//
// main.m
// ClassModuleDevelop 类的模块开发演示
//
// Created by ZhaiKun on 2017/10/10.
// Copyright © 2017年 ZhaiKun. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"//导入头文件,使用文件中的类

int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
Person *person = [Person new];
[person run];
}
return 0;
}

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