原创 UIView的繪製原理 和 異步繪製的實現

UIView 繪製原理        1、當我們調用【UIView setNeedsDisplay】這個方法時,其實並沒有立即進行繪製工作,系統會立即調用CALayer的同名方法,並且在當前layer上打上一個標記,然後會在當前runlo

原创 離屏渲染

離屏渲染是指GPU在當前屏幕緩衝區意外的開闢了一個 緩衝區進行渲染操作 性能損耗原因: 1、創建了新的緩衝區 2、上下文的頻繁切換 產生原因: shouldRasterize 光柵化、遮罩masks、shadows陰影、edgeAntia

原创 iOS 構建緩存時選 NSCache 而非NSDictionary

當系統資源將要耗盡時,NSCache可以自動刪減緩存。如果採用普通的字典,那麼就要自己編寫掛鉤,在系統通知時手動刪減緩存,NSCache會先行刪減 時間最久爲被使用的對象 NSCache 並不會拷貝鍵,而是會保留它。此行爲用NSDicti

原创 iOS 響應者鏈

事件的分發和傳遞 當iOS 程序中發生觸摸事件後,系統會將事件加入到UIApplication管理的一個任務隊列中 UIApplication將處於任務隊列最前端的事件向下分發。即UIWindow UIWindow將事件向下分發,即UIV

原创 TCP 和 UDP

一、TCP 是傳輸控制協議  transport control protocol  ,基於字節流傳輸,有連接,可以提供可靠地通信傳輸        TCP充分實現了數據傳輸時的各種控制功能,可以進行丟包的重發,還可以對次序亂掉的分包進行

原创 堆和棧的區別

堆棧控件分配 棧(操作系統):由操作系統自動釋放,存放函數的參數值,局部變量的值。其操作方式類似於數據結構中的棧。 堆(操作系統):一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收,分配方式類似於鏈表 堆棧緩存方式

原创 自定義tabbar

iOS 自定義tabbar具體代碼參考:https://github.com/yuchenArron/TabBar一 、將tabbarviewcontroller 的 tabbar 隱藏  [self.tabBar setHidden:Y

原创 pop 到指定控制器

前提 通過push方式 -推出控制器1、從 A控制器 push 新的控制器,從新的控制器返回 直接返回到 A控制器 的 前一個 或 前幾個控制器(需要對下面代碼略作改動),通過下面方式實現:if (self.navigationContr

原创 一、Audio 介紹

1、音頻在iOS 中的架構和框架 2、音頻編解碼算法、文件封裝格式 3、播放系統聲音、震動、提示聲音 4、AVfoundation精準中英文語言識別 編碼格式:pcm\aac\mp3… Audio 流程圖:

原创 二、Audio 架構

Audio架構圖 從上圖看出,共分爲高中低三層 **高層: AVaudioplayer** audio 基本操作:播放 暫停 停止 循環 時間控制:任意時間位置播放、進度控制 從文件或者緩衝區播放 獲取音視頻關鍵參數 AV

原创 兩臺mac共享文件

1、打開finder ,按住command + K 會彈出: 2、在服務器地址欄,輸入需要連接的mac 的 IP地址。可通過如下方式獲取: 點擊wifi圖標->打開網絡偏好設置-> 3、輸入IP地址後點擊連接: 1)如

原创 iOS socket 編程

socket (套接字)是通信的基石,是支持tcp/ip協議的網絡通信的基本操作單元,包含進行網絡通信必須的五種信息:連接使用的協議,本地主機的IP地址,本地進程的協議端口,遠端主機的IP地址,遠端進程的協議端口。 Socket是對TCP

原创 UIButton title和image 水平居中

UIImage *image = [UIImage imageWithContentsOfFile:imgPath];    [but setImage:image forState:state];      NSString *str

原创 assign 和 weak的區別

assign 和weak都是弱引用類型 用weak聲明的變量在棧中會自動清零,賦值爲nil 用assign 聲明的變量在棧中可能不會自動賦值爲nil,會造成野指針錯誤 在定義一個類的property時候,爲property選擇stro

原创 三、Audio 系統聲音

全能型:AVFoundation 編解碼:AudiotoolBox 底層:AudioUnit 3D: openAL 控制類VC:mediaPlayer Audio systemsound 播放震動效果 播放系統音樂效果 播放提示音效果