你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> AFNetworking源碼拾遺

AFNetworking源碼拾遺

編輯:IOS開發基礎

一句話簡介:最著名的OC開源網絡庫。

Github: 傳送門

PS: 本拾遺系列文章只專注於代碼以及工程層面知識點拾遺,架構層面作者文章已經進行了詳細的講解。

1. @import和modulemap

首先OC中的@import以及Swift中的import其實都是基於modulemap實現的。

  • @import的使用可以參考:@import vs #import

  • 關於modulemap相關的內容可以參考:Modular framework, creating and using them

2. 各種標記

  • __unused: 避免因變量聲明未使用造成的警告。

  • ARC相關(如__autoreleasing)參考: iOS開發ARC內存管理技術要點

  • NS_DESIGNATED_INITIALIZER 聲明了designated初始化方法後,其余初始化方法如果沒有調用designated初始化會有警告提示,具體可以參考: Xcode 6 Objective-C Modernization

  • DEPRECATED_ATTRIBUTE(過期)、NS_SWIFT_NOTHROW(一些便於OC遷移Swift的標記)等

3. 宏

  • FOUNDATION_EXPORT: 對於extern的兼容性封裝,根據不同的平台,轉化為對應的extern形式。

  • NS_ASSUME_NONNULL_BEGIN、NS_ASSUME_NONNULL_END: 在宏范圍內的變量、參數、返回值等都默認添加nonnull。

4. queryString轉換的經典代碼

經常被摘出來放到自己項目中使用。

/**
 Returns a percent-escaped string following RFC 3986 for a query string key or value.
 RFC 3986 states that the following characters are "reserved" characters.
    - General Delimiters: ":", "#", "[", "]", "@", "?", "/"
    - Sub-Delimiters: "!", "$", "&", "'", "(", ")", "*", "+", ",", ";", "="
 In RFC 3986 - Section 3.4, it states that the "?" and "/" characters should not be escaped to allow
 query strings to include a URL. Therefore, all "reserved" characters with the exception of "?" and "/"
 should be percent-escaped in the query string.
    - parameter string: The string to be percent-escaped.
    - returns: The percent-escaped string.
 */
NSString * AFPercentEscapedStringFromString(NSString *string) {

    static NSString * const kAFCharactersGeneralDelimitersToEncode = @":#[]@";
     // does not include "?" or "/" due to RFC 3986 - Section 3.4
    static NSString * const kAFCharactersSubDelimitersToEncode = @"!$&'()*+,;=";
    
    NSMutableCharacterSet * allowedCharacterSet = [[NSCharacterSet URLQueryAllowedCharacterSet] mutableCopy];
    
    [allowedCharacterSet removeCharactersInString:[kAFCharactersGeneralDelimitersToEncode stringByAppendingString:kAFCharactersSubDelimitersToEncode]];
    
// FIXME:  

    // return [string stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacterSet];
    
    // 以下為針對非單字節字符的處理
  
    static NSUInteger const batchSize = 50;
    
    NSUInteger index = 0;
    
    NSMutableString *escaped = @"".mutableCopy;
    
    while (index < string.length) {
    
        NSUInteger length = MIN(string.length - index, batchSize);
        
        NSRange range = NSMakeRange(index, length);
        
        // To avoid breaking up character sequences such as ????????????????
        
        range = [string rangeOfComposedCharacterSequencesForRange:range];
        
        NSString *substring = [string substringWithRange:range];
        
        NSString *encoded = [substring stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacterSet];
        
        [escaped appendString:encoded];
        
        index += range.length;
    }
    
return escaped;
}

5. 架構簡圖

afnetworking.png

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved