iOS 工程组织结构分享

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

内容简介:常用的第三方库其中的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来扩展功能。


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

查看所有标签

猜你喜欢:

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

Large-Scale Inference

Large-Scale Inference

Bradley Efron / Cambridge University Press / 2010-8-5 / GBP 48.00

We live in a new age for statistical inference, where modern scientific technology such as microarrays and fMRI machines routinely produce thousands and sometimes millions of parallel data sets, each ......一起来看看 《Large-Scale Inference》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

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

在线图片转Base64编码工具