前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS - 代码Review (二)

iOS - 代码Review (二)

原创
作者头像
Wilbur-L
修改2021-10-29 10:35:34
3740
修改2021-10-29 10:35:34
举报
文章被收录于专栏:iOS底层原理

一·在类的头文件中尽量少引入其他文件

代码语言:javascript
复制
//
// Test.h
// app
//
// Created by you on 2021/10/29.
// Copyright © 2021 you. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface LDTest : NSObject

@end
NS_ASSUME_NONNULL_END

创建一个继承自NSObject的类时候我们无法避免的会引入Foundation.h头文件,如果不在头文件引入这个文件的话,那么就要引入其

超类/根类所属框架的Basic Header File。

但通常我们无法避免引入头文件,因为我们需要把某个类方法暴露出来或者是使用单例,那么.h文件会变成这样

代码语言:javascript
复制
//
// Test.h
// app
//
// Created by you on 2021/10/29.
// Copyright © 2021 you. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Manager.h"
NS_ASSUME_NONNULL_BEGIN
@interface LDTest : NSObject
@property (nonatomic, strong) Manager *manager;
@end
NS_ASSUME_NONNULL_END

这么做虽然可以,但是不够优雅,因为通常来说我只需要用到单例里的某个方法或类里的某个方法,在.h头文件中引入会把该单例或类的头文件一并引入,然鹅我们并不需要用到。

二·向前声明

当我们使用一个类文件时候,并不需要知道所引用的头文件里面的所有细节,此时用向前声明 @class 来告诉编译器有一个类我需要用到就好,那么此时头文件会变成

代码语言:javascript
复制
//
// Test.h
// app
//
// Created by you on 2021/10/29.
// Copyright © 2021 you. All rights reserved.
//
#import <Foundation/Foundation.h>
@class Manager;
NS_ASSUME_NONNULL_BEGIN
@interface Test : NSObject
@property (nonatomic, strong) Manager *manager;
@end
NS_ASSUME_NONNULL_END

则在Test类的实现文件里则需要引入Manager.h 因为需要使用到该类必须知道其接口的所有细节。

代码语言:javascript
复制
//
//  Test.m
//  app
//
//  Created by you on 2021/10/29.
//  Copyright © 2021 you. All rights reserved.
//

#import "LDTest.h"
#import "Manager.h"

@implementation Test

@end

将引入头文件的时机尽量延后,只在确有需要的时候引入,这样可以减少类使用者所需要引入头文件的数量。

三·结论

除非有明确的必要,否则不要引入头文件。一般来说,应该在某个类的头文件使用向前声明来提及别的类,并在实现文件中引入哪些类的头文件。这么做可以尽量降低类之间的耦合

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一·在类的头文件中尽量少引入其他文件
  • 二·向前声明
  • 三·结论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档