原创 NSDictionary的實質和實現原理

一、NSDictionary使用原理     1.NSDictionary(字典)是使用 hash表來實現key和value之間的映射和存儲的, hash函數設計的好壞影響着數據的查找訪問效率。     - (void)setObject

原创 OC部分語法簡單總結

1、一個NSObject對象佔用多少內存? 系統分配了16個字節給NSObject對象(通過malloc_size函數獲得) 但NSObject對象內部只使用了8個字節的空間(64bit環境下,可以通過class_getInstanceS

原创 Objective-C 對象存儲在堆上而不是棧上 why?

一、什麼是棧對象和堆對象 在Objective-C 中,對象通常是指一塊有特定佈局的連續內存區域。我們通常這樣創建一個對象: NSObject *obj = [[NSObject alloc] init];  這行代碼創建了一個 NSOb

原创 NSTaggedPointerString,__NSCFConstantString,__NSCFString和NSString的關係?NSString爲什麼用copy?

​​​​問題引入: NSString都存儲在堆區嗎?會不會存在棧區,或者數據區呢? NSString用copy修飾還是strong修飾?NSString調用copy和mutableCopy會創建一個新的內存空間嗎?NSMutableStr

原创 NSTimer 循環引用分析與解決方案

NSTimer循環引用分析 下面的方法可以創建計時器,並將其預先安排到當前運行循環(Run Loop)當中: + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti

原创 響應鏈遇到手勢,問題分析

手勢是ios開發不可或缺的一部分,但對於ios的手勢及事件相應機理大家並不知道,所以今天給大家講一講ios的事件相應機理 首先,ios的事件傳遞是依靠“響應鏈”傳遞的,當傳遞到鏈的某一個鏈環上的對象處理了這個事件,事件就停止傳遞。那麼響應

原创 ARC和MRC下Block的使用注意

Block 1.是一段代碼塊,只在被調用的時候執行(類似於方法和函數) 2.是一種數據類型(類似於’int’,’NSString’) 3.可以定義成臨時變量 4.可以當做參數傳遞 5.可以定義成屬性 6.是一種匿名函數(重要,只有函數體,

原创 iOS Strong和Copy 理解

問題描述 在定義一個類的property時候,爲property選擇strong還是copy特別注意和研究明白的,如果property是NSString或者NSArray及其子類的時候,最好選擇使用copy屬性修飾。爲什麼呢?這是爲了防止

原创 Block本質

第一部分:Block本質 Q:什麼是Block,Block的本質是什麼? block本質上也是一個OC對象,它內部也有個isa指針 block是封裝了函數調用以及函數調用環境的OC對象 block是封裝函數及其上下文的OC對象 bloc

原创 App啓動原理和啓動過程

一、程序啓動原理 1.1、main函數中執行了一個UIApplicationMain這個函數UIApplicationMain(int argc, char *argv[], NSString *principalClassName, N

原创 CALayer 和 UIView的區別和聯繫

UIView是iOS系統中界面元素的基礎, 所有的界面元素都繼承自它, UIView本身完全是由CoreAnimation來實現. 真正的繪圖部分, 是由一個CALayer類來管理. UIView更像是一個CALayer的管理器, 所以訪

原创 iOS線程間通信

什麼叫做線程間通信  在1個進程中,線程往往不是孤立存在的,多個線程之間需要經常進行通信  線程間通信的體現  1個線程傳遞數據給另1個線程   在1個線程中執行完特定任務後,轉到另1個線程繼續執行任務  線程間通信常用方法 1. NST

原创 斷點續傳下載原理實現

需求背景 動態創建的文件下載的時候希望瀏覽器顯示下載進度 動態創建的文件希望能夠分段下載 HTTP斷點續傳報文 要實現HTTP斷點續傳必須要簡單瞭解以下幾個報文。 Accept-Ranges 告訴客戶端(瀏覽器..)服務器端支持斷點續傳 

原创 UITableViewCell性能優化

在使用UITableView的時候,有的時候你會碰到Cell卡頓,圖片加載慢,使得滑動cell時變得不那麼流暢,這些都會影響用戶體驗,拉低整體app的效果。當碰到這一系列問題時,性能優化看來變得至關重要。 UITableView認識 UI

原创 iOS 如何優化 App

App 啓動時間優化 優化的時候,我們將啓動時間分爲 pre-main 時間和 main 函數到第一個界面渲染完成時間這兩個部分。 1. pre-main階段 1.1. 加載應用的可執行文件 1.2. 加載動態鏈接庫加載器dyld(dyn