iOS 工程组织结构分享

栏目: IOS · 发布时间: 6年前

内容简介:常用的第三方库其中的XTSafeCollection推荐使用,避免数组越界引起的crash。对Afnetworking进行一次封装
iOS 工程组织结构分享
开发iOS项目已经有几十个,对iOS的工程组织结构有一些经验和大家分享下。并写了一个Demo, 请参考 github.com/yinanwang1/…

1. 使用cocoaPod进行第三方库的管理

常用的第三方库

platform :ios, '7.0'

target 'Structure' do

pod 'AFNetworking', '~> 2.5.4'
pod 'SDWebImage', '~> 3.7.5'
pod 'JTObjectMapping', '~> 1.1.2'
pod 'XTSafeCollection', '~> 1.0.3'
pod 'Masonry', '~> 0.6.4'

end
复制代码

其中的XTSafeCollection推荐使用,避免数组越界引起的crash。

2. 网络层

(1)AFNetworking的封装

对Afnetworking进行一次封装

+ (AFHTTPSessionManager *)sharedClient;

+ (NSURLSessionDataTask *)postRequest:(NSString*)path
                           parameters:(id)parameters
                             encToken:(NSString*)encToken
                              isLogin:(BOOL)isLogin
                              success:(void (^)(ErrorCode status, NSString * msg, NSDictionary * data))success
                              failure:(void (^)(ErrorCode status, NSString *msg, NSDictionary * data))failure;

+ (NSURLSessionDataTask *)getRequest:(NSString*)path
                          parameters:(NSDictionary*)parameters
                            encToken:(NSString*)encToken
                             isLogin:(BOOL)isLogin
                             success:(void (^)(ErrorCode status, NSString * msg, NSDictionary * data))success
                             failure:(void (^)(ErrorCode status, NSString *msg, NSDictionary * data))failure;

+ (NSURLSessionDataTask *)uploadRequest:(NSString*)path
                             parameters:(NSDictionary*)parameters
                               encToken:(NSString*)encToken
                          formDataArray:(NSArray *)formDataArray
                                isLogin:(BOOL)isLogin
                                success:(void (^)(ErrorCode status, NSString * msg, NSDictionary * data))success
                                failure:(void (^)(ErrorCode status, NSString *msg, NSDictionary * data))failure;

+ (NSURLSessionDataTask *)putRequest:(NSString*)path
                          parameters:(NSDictionary*)parameters
                            encToken:(NSString*)encToken
                             isLogin:(BOOL)isLogin
                             success:(void (^)(ErrorCode status, NSString * msg, NSDictionary * data))success
                             failure:(void (^)(ErrorCode status, NSString *msg, NSDictionary * data))failure;

+ (NSURLSessionDataTask *)deleteRequest:(NSString*)path
                             parameters:(NSDictionary*)parameters
                               encToken:(NSString*)encToken
                                isLogin:(BOOL)isLogin
                                success:(void (^)(ErrorCode status, NSString * msg, NSDictionary * data))success
                                failure:(void (^)(ErrorCode status, NSString *msg, NSDictionary * data))failure;
复制代码

在sharedClient中创建一个AFHTTPSessionManager,并封装了Get,Post,Upload,Put和Delete几个类方法,进行HTTP的基本请求操作。

(2)WebService 的使用

假设有一个接口 #define URL_TEST @"test" 需要进行网络获取,那么创建一个ChatsModel.h的文件,这个文件主要是将Chats模块的所有的接口都会放在这个文件中。如

iOS 工程组织结构分享
在ChatsModel文件中创建方法 - (void)fetchData:(void (^)(ErrorCode status, NSString *messageStr, ChatsEntity *chatesEntity))compelte;

进行网络获取。

(3)Entity的转化

将Json转化为Model使用JTObjectMapping的第三方库,当然也可以用Mantle。将从服务器返回的数据直接转化为Model。Model中有2个实例变量

@property (nonatomic, strong) NSString *nameStr;
@property (nonatomic, strong) NSNumber *ageIntNum;
复制代码

创建一个方法进行类型的转换

+ (instancetype)createChatsEntityWithDic:(NSDictionary *)dic
{
    NSDictionary *mapping = @{
                              @"name": @"nameStr",
                              @"age":@"ageIntNum",
                              };
    
    ChatsEntity *entity = [ChatsEntity objectFromJSONObject:dic
                                                    mapping:mapping];
    
    return entity;
}
复制代码

3. 组织结构

关于组织结构,一定要打开项目的文件夹,手动先创建每层的文件夹,再将文件夹Add到project中,这样有一个好处是Xcode中显示的文件夹和Finder显示的保持一致。 不然Finder中看到的文件是全部放在Structure文件夹中,不方便阅读。

(1)Macros

宏定义一般创建4个文件: <1> URL.h 将网络访问需要使用的URL宏定义在这个文件中。如 #define SERVER_URL  @"http://www.baidu.com" . <2> Keys.h 将需要用的Key放在这个文件,如微信,微博,shareSDK等。 <3> Macros.h 将项目中用到并且是全局要用到的Enumeration放在这个文件中,方便调用也可以避免重复定义。如

typedef enum
{
    //未知错误
    kUnknownError = -1,
    
    kNoError = 0,
    
    kNetWorkError = 1,
    
}ErrorCode;
复制代码

<4> UserDefaultAndNotification.h 将通知和保存到User Default中的Key保存到这个文件,方便统一管理Keys,避免重复定义引起异常错误。 <5>Utilities.h 将定义的 工具 宏统一放在这个文件中,常见的DLog等。

(2)MVCs

业务相关的文件,根据模块分开,每一个模块中再依据MVC进行区分,如

iOS 工程组织结构分享

Chats文件夹是聊天的模块, <1>其中的ViewController.h/.m是Chats的根Controller。 <2>Model文件夹对应M层,并包含了Entity的文件夹,进行Json转Model。 <3>Views文件夹对应MVC中的V层。

(3)Utilities

将在每一个模块中,需要使用到UIKit或算法,可以抽出来放在文件中,如自定义的AlertView货Share。

(4)Base

定义一些基础的类,如UIViewController,UINavigationController。根据APP的需求将通用的颜色,加载视图等放在这个文件夹中。

(5)External

第三方库的文件,有些第三方库没有在Cocoapod上,那么将文件Copy到这个文件夹中, 尽量不要修改第三方库的文件 ,可以创建第三方库的category来扩展功能。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Black Box Society

The Black Box Society

Frank Pasquale / Harvard University Press / 2015-1-5 / USD 35.00

Every day, corporations are connecting the dots about our personal behavior—silently scrutinizing clues left behind by our work habits and Internet use. The data compiled and portraits created are inc......一起来看看 《The Black Box Society》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具