級別: ★★☆☆☆
標籤:「iOS」「Foundation」「Objective-C」
做者: MrLiuQ
審校: QiShare團隊php
前言:
這幾篇文章是小編在鑽研《Effective Objective-C 2.0》的知識產出,其中包含做者和小編的觀點,以及小編整理的一些demo。但願能幫助你們以簡潔的文字快速領悟原做者的精華。
在這裏,QiShare團隊向原做者Matt Galloway表達誠摯的敬意。html
文章目錄以下:
iOS 編寫高質量Objective-C代碼(一)
iOS 編寫高質量Objective-C代碼(二)
iOS 編寫高質量Objective-C代碼(三)
iOS 編寫高質量Objective-C代碼(四)
iOS 編寫高質量Objective-C代碼(五)
iOS 編寫高質量Objective-C代碼(六)
iOS 編寫高質量Objective-C代碼(七)
iOS 編寫高質量Objective-C代碼(八)git
本篇的主題是:「系統框架」。 在咱們平常開發中,都會使用系統的一些框架。所以熟悉系統框架是頗有必要的。 那麼今天,咱們就一塊兒來探索一下系統框架中有哪些珍寶呢?github
系統框架包括但不限於:數據庫
1. Foundation:基礎框架。
提供了包括數據存儲和持久性,文本處理,日期和時間計算,排序和過濾以及網絡等功能。Foundation定義的類,協議和數據類型在整個macOS
,iOS
,watchOS
和tvOS SDK
中使用。數組
2. CoreFoundation:核心基礎框架。
提供了C語言級的基礎功能,爲應用程序提供基本數據管理和服務功能。並可經過無縫橋接技術(__bridge
)實現C語言類與OC對象的轉換。緩存
3. UIKit:視圖框架。
爲iOS
與tvOS
提供界面與視圖的功能。(重要:除非另有說明,不然必定要在主線程中使用UIKit
框架。)安全
4. CoreAnimation:核心動畫框架。
提供了高幀速率和流暢的動畫功能,而且不會給CPU
太多負擔,也不會下降應用程序的響應速度。微信
5. CoreGraphics:核心圖形框架。
基於Quartz繪圖引擎,提供了輕量級2D渲染所必備的數據結構與函數。包括CGPoint
、CGSize
、CGRect
等數據結構。網絡
6. CoreData:核心數據框架。
提供了將OC對象寫入數據庫的功能,便於持久保存。
7. CoreText:文本框架。
提供了C語言級別的文字排版及渲染操做。
8. AVFoundation:音視頻框架。
提供了控制攝像頭,以及處理、合成、控制、導入、導出音頻/視頻的功能。
9. CFNetwork:網絡框架。
提供了C語言級別的網絡通訊能力,將BSD socket抽象成易於使用的網絡接口,以便網絡通訊。
10. ARKit:AR框架。
11. SpriteKit:2D遊戲框架。
12. CoreLocation、MapKit:定位地圖相關框架。
13. Address Book:通信錄框架。
14. HealthKit:健康相關框架。
15. HomeKit:爲智能化硬件提供的框架。
16. PhotoKit:相冊框架。 ......(還有不少框架,詳細的請看下面的官方文檔。)
PS:蘋果官方文檔
遍歷collection有四種方法:for循環、NSEnumerator遍歷法、for-in快速遍歷法、塊枚舉法。
1. for循環:
最基本的循環方法,與其餘語言相似。
NSArray *arr = @[@1, @2, @3, @4, @5];
for (NSInteger i = 0; i < 5; i++) {
NSLog(@"%@",arr[i]);
}
複製代碼
2. NSEnumerator遍歷法:
NSArray *arr = @[@1, @2, @3, @4, @5];
NSEnumerator *enumerator = [arr objectEnumerator];
NSNumber *num = nil;
while ((num = [enumerator nextObject]) != nil) {
NSLog(@"%@",num);
}
複製代碼
3. for-in快速遍歷法:
在開發中,常使用的方法。
NSArray *arr = @[@1, @2, @3, @4, @5];
for (NSNumber *num in arr) {
NSLog(@"%@",num);
}
複製代碼
4. 塊枚舉法:
基於塊來遍歷,遍歷時既能獲取對象,也能知道其下標。此外,還能經過stop
對象終止遍歷。(即調用*stop = YES
便可)
官方:Executes a given block using each object in the array, starting with the first object and continuing through the array to the last object.
翻譯:使用數組中的每一個對象執行給定的block,從第一個對象開始,一直到最後一個對象。
基本使用:
NSArray *arr = @[@1, @2, @3, @4, @5];
[arr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@",obj);
if (idx == arr.count - 1) {
*stop = YES;
}
}];
複製代碼
無線橋接技術(__bridge
):可將 「OC對象」 與 「C語言中的數據結構」 來回轉換。
舉個簡單的例子:NSArray
與CFArrayRef
的無縫橋接。
NSArray *anNSArray = @[@1, @2, @3, @4, @5];
CFArrayRef aCFArray = (__bridge CFArrayRef)anNSArray;//!< 無縫橋接
NSLog(@"Size of array = %li", CFArrayGetCount(aCFArray));
// Output: Size of array = 5
複製代碼
NSCache的優勢:
NSCache
會自動刪減。並先行刪除***「最久未使用的對象」***。NSCache
不會自動拷貝鍵。(PS:由於NSCache
沒有遵循<NSCopying>
/<NSMutableCopying>
協議)NSCache
是線程安全的。在不加同步鎖的前提下,依然支持多線程訪問NSCache
。load與initialize方法都要保持精簡。
load
中的注意點:
initialize
中的注意點:
NSTimer
對象會保留其目標,直到計時器自己失效爲止,調用[_timer invalidate];
可令計時器失效。另外,一次性的計時器在觸發完任務後也會失效。
反覆執行任務的計時器(repeating timer
)很容易產生循環引用。若是這種計時器的目標對象又保留了計時器自己,那就會產生循環引用,致使內存泄漏。多是直接發生的,也多是其餘對象間接發生的。
關注咱們的途徑有:
QiShare(簡書)
QiShare(掘金)
QiShare(知乎)
QiShare(GitHub)
QiShare(CocoaChina)
QiShare(StackOverflow)
QiShare(微信公衆號)
推薦文章:
iOS KVC與KVO簡介
iOS 本地化(IB篇)
iOS 本地化(非IB篇)
iOS 小遊戲項目——數字速算升級版
iOS 小遊戲項目——你話我猜升級版
奇舞週刊