級別: ★★☆☆☆
標簽:「iOS」「Foundation」「Objective-C」
作者: MrLiuQ
審校: QiShare團隊
前言:
這幾篇文章是小編在鉆研《Effective Objective-C 2.0》的知識產出诗赌,其中包含作者和小編的觀點枕屉,以及小編整理的一些demo。希望能幫助大家以簡潔的文字快速領悟原作者的精華。
在這里,QiShare團隊向原作者Matt Galloway表達誠摯的敬意。
文章目錄如下:
iOS 編寫高質量Objective-C代碼(一)
iOS 編寫高質量Objective-C代碼(二)
iOS 編寫高質量Objective-C代碼(三)
iOS 編寫高質量Objective-C代碼(四)
iOS 編寫高質量Objective-C代碼(五)
iOS 編寫高質量Objective-C代碼(六)
iOS 編寫高質量Objective-C代碼(七)
iOS 編寫高質量Objective-C代碼(八)
本篇的主題是:“系統(tǒng)框架”枣宫。
在我們日常開發(fā)中,都會使用系統(tǒng)的一些框架吃环。因此熟悉系統(tǒng)框架是很有必要的也颤。
那么今天,我們就一起來探索一下系統(tǒng)框架中有哪些珍寶呢郁轻?
一翅娶、熟悉系統(tǒng)框架
系統(tǒng)框架包括但不限于:
1. Foundation:基礎框架。
提供了包括數(shù)據(jù)存儲和持久性好唯,文本處理竭沫,日期和時間計算,排序和過濾以及網(wǎng)絡等功能骑篙。Foundation定義的類蜕提,協(xié)議和數(shù)據(jù)類型在整個macOS
,iOS
靶端,watchOS
和tvOS SDK
中使用谎势。
2. CoreFoundation:核心基礎框架。
提供了C語言級的基礎功能杨名,為應用程序提供基本數(shù)據(jù)管理和服務功能脏榆。并可通過無縫橋接技術(__bridge
)實現(xiàn)C語言類與OC對象的轉換。
3. UIKit:視圖框架镣煮。
為iOS
與tvOS
提供界面與視圖的功能姐霍。(重要:除非另有說明,否則一定要在主線程中使用UIKit
框架典唇。)
4. CoreAnimation:核心動畫框架镊折。
提供了高幀速率和流暢的動畫功能,并且不會給CPU
太多負擔介衔,也不會降低應用程序的響應速度恨胚。
5. CoreGraphics:核心圖形框架椅邓。
基于Quartz繪圖引擎秧了,提供了輕量級2D渲染所必備的數(shù)據(jù)結構與函數(shù)。包括CGPoint
鞋真、CGSize
、CGRect
等數(shù)據(jù)結構升熊。
6. CoreData:核心數(shù)據(jù)框架俄烁。
提供了將OC對象寫入數(shù)據(jù)庫的功能,便于持久保存级野。
7. CoreText:文本框架页屠。
提供了C語言級別的文字排版及渲染操作。
8. AVFoundation:音視頻框架蓖柔。
提供了控制攝像頭辰企,以及處理、合成况鸣、控制牢贸、導入、導出音頻/視頻的功能镐捧。
9. CFNetwork:網(wǎng)絡框架潜索。
提供了C語言級別的網(wǎng)絡通信能力,將BSD socket抽象成易于使用的網(wǎng)絡接口懂酱,以便網(wǎng)絡通信帮辟。
10. ARKit:AR框架。
11. SpriteKit:2D游戲框架玩焰。
12. CoreLocation、MapKit:定位地圖相關框架芍锚。
13. Address Book:通訊錄框架昔园。
14. HealthKit:健康相關框架。
15. HomeKit:為智能化硬件提供的框架并炮。
16. PhotoKit:相冊框架默刚。
......(還有很多框架,詳細的請看下面的官方文檔逃魄。)
PS:蘋果官方文檔
二荤西、多用塊枚舉,少用for循環(huán)
遍歷collection有四種方法:for循環(huán)伍俘、NSEnumerator遍歷法邪锌、for-in快速遍歷法、塊枚舉法癌瘾。
1. for循環(huán):
最基本的循環(huán)方法觅丰,與其他語言類似。
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快速遍歷法:
在開發(fā)中妨退,常使用的方法妇萄。
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.
翻譯:使用數(shù)組中的每個對象執(zhí)行給定的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;
}
}];
三基茵、對自定義其內存管理語義的collection使用無縫橋接
無線橋接技術(__bridge
):可將“OC對象”與“C語言中的數(shù)據(jù)結構”來回轉換奋构。
舉個簡單的例子: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而非NSDictionary
NSCache的優(yōu)點:
- 當系統(tǒng)資源將要耗盡時弥臼,
NSCache
會自動刪減。并先行刪除“最久未使用的對象”根灯。 -
NSCache
不會自動拷貝鍵径缅。(PS:因為NSCache
沒有遵循<NSCopying>
/<NSMutableCopying>
協(xié)議) -
NSCache
是線程安全的。在不加同步鎖的前提下烙肺,依然支持多線程訪問NSCache
纳猪。
五、精簡load與initialize的實現(xiàn)代碼
load與initialize方法都要保持精簡桃笙。
load
中的注意點:
- 如果分類和所屬類都定義了load方法氏堤,則會先調用主類里的load方法,然后再調用分類的搏明。
- 在load方法內使用其他類是不安全的鼠锈。(因為調用時其他類可能還沒有加載好)
- 如果某個類本身沒有實現(xiàn)load方法,那么不管超類是否實現(xiàn)load方法都不會調用星著。
- load應只用于調試购笆,而非執(zhí)行任務。
initialize
中的注意點:
- 如果某個類未實現(xiàn)initialize虚循,而其超類實現(xiàn)了同欠,就會運行超類的方法。
- 開發(fā)者無法控制類的初始化時機横缔。
- 如果某個類的initizalize實現(xiàn)代碼很復雜铺遂,其中用到了別的類。若那些類還沒初始化剪廉,就會強迫他們初始化娃循。
- initialize方法只應該用來設置內部數(shù)據(jù)。
六斗蒋、別忘了NSTimer會保留其目標對象
NSTimer
對象會保留其目標捌斧,直到計時器本身失效為止笛质,調用[_timer invalidate];
可令計時器失效。另外捞蚂,一次性的計時器在觸發(fā)完任務后也會失效妇押。反復執(zhí)行任務的計時器(
repeating timer
)很容易產生循環(huán)引用。如果這種計時器的目標對象又保留了計時器本身姓迅,那就會產生循環(huán)引用敲霍,導致內存泄漏《〈妫可能是直接發(fā)生的肩杈,也可能是其他對象間接發(fā)生的。
了解更多iOS及相關新技術解寝,請關注我們的公眾號:
關注我們的途徑有:
QiShare(簡書)
QiShare(掘金)
QiShare(知乎)
QiShare(GitHub)
QiShare(CocoaChina)
QiShare(StackOverflow)
QiShare(微信公眾號)
推薦文章:
iOS KVC與KVO簡介
iOS 本地化(IB篇)
iOS 本地化(非IB篇)
iOS 小游戲項目——數(shù)字速算升級版
iOS 小游戲項目——你話我猜升級版
奇舞周刊