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模組的所有的介面都會放在這個檔案中。如
- (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進行區分,如
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來擴充套件功能。
(6)Resources
放圖片,plist等資原始檔。
(7)PrefixHeader.pch
將很多類中都需要使用的標頭檔案,放在這個檔案中。免得在一個class檔案中都新增一次相同的標頭檔案。
程式碼規範可以參考iOS程式碼程式設計規範-根據專案經驗彙總.