他想表達(dá)的是意思是:子線程的 runloop 無法通過系統(tǒng)自動創(chuàng)建,必須有開發(fā)者手寫創(chuàng)建并開啟。
iOS面試題:一個 autorealese 對象在什么時刻釋放迁霎?分兩種情況:手動干預(yù)釋放時機(jī)、系統(tǒng)自動去釋放实胸。 手動干預(yù)釋放時機(jī):手動指定 autoreleasepool 的 autorelease 對象馋没,在當(dāng)前作用域大括號結(jié)束時釋放。 ...
他想表達(dá)的是意思是:子線程的 runloop 無法通過系統(tǒng)自動創(chuàng)建,必須有開發(fā)者手寫創(chuàng)建并開啟。
iOS面試題:一個 autorealese 對象在什么時刻釋放迁霎?分兩種情況:手動干預(yù)釋放時機(jī)、系統(tǒng)自動去釋放实胸。 手動干預(yù)釋放時機(jī):手動指定 autoreleasepool 的 autorelease 對象馋没,在當(dāng)前作用域大括號結(jié)束時釋放。 ...
第一篇文章對VIPER進(jìn)行了簡單的介紹俏竞,這篇文章將從VIPER的源頭開始,比較現(xiàn)有的幾種VIPER實現(xiàn)堂竟,對VIPER進(jìn)行進(jìn)一步的職責(zé)剖析魂毁,并對各種細(xì)節(jié)實現(xiàn)問題進(jìn)行挖掘和探討。...
還要一中是基于 Protocol 的 router出嘹,參考 ZIKRouter
iOS 組件化 —— 路由設(shè)計思路分析前言 隨著用戶的需求越來越多席楚,對App的用戶體驗也變的要求越來越高。為了更好的應(yīng)對各種需求税稼,開發(fā)人員從軟件工程的角度烦秩,將App架構(gòu)由原來簡單的MVC變成MVVM,VIPER等...
target-action 提供了遠(yuǎn)程調(diào)用和本地調(diào)用為主娶聘,遠(yuǎn)程調(diào)用是將 url 方式轉(zhuǎn)換成本地調(diào)用的 perfortarget
iOS 組件化 —— 路由設(shè)計思路分析前言 隨著用戶的需求越來越多闻镶,對App的用戶體驗也變的要求越來越高。為了更好的應(yīng)對各種需求丸升,開發(fā)人員從軟件工程的角度铆农,將App架構(gòu)由原來簡單的MVC變成MVVM,VIPER等...
首先線程和runloop是一一對應(yīng)的, 當(dāng)開啟線程時會伴隨創(chuàng)建一個runloop, 但這個runloop并不會向主線程一樣自動開啟, 需要你執(zhí)行 getCurrent 方法進(jìn)行開啟, 這個所謂的創(chuàng)建是說沒法對 runloop 使用 new/alloc 方法進(jìn)行創(chuàng)建, 子線程的runloop和主線程的runloop的最主要最作用都是為了保證線程不會退出, 讓事件得以執(zhí)行完成, 但是當(dāng)線程需要銷毀時, 對應(yīng)的runloop自然也需要被釋放.
iOS 多線程:『RunLoop』詳盡總結(jié)本文首發(fā)于我的個人博客:「程序員充電站」[https://itcharge.cn]文章鏈接:「傳送門」[https://itcharge.cn/ios-complete-le...
@動感超人丶 如果你有印象的話,就會發(fā)現(xiàn)老的 runtime和新的 runtime 中的 objc_class 結(jié)構(gòu)為什么差異會那么大, 還需要一個class_rw_t 和class_ro_t 哈哈哈
iOS-分類(Category)Category是Objective-C 2.0之后添加的語言特性,分類沼头、類別其實都是指的Category爷绘。Category的主要作用是為已經(jīng)存在的類添加方法。Objecti...
靜態(tài)庫是編譯期的時候連接的吧, 要不然編譯出來的可執(zhí)行文件就不能執(zhí)行了.
深入理解iOS App的啟動過程前言 啟動時間是衡量應(yīng)用品質(zhì)的重要指標(biāo)进倍。 本文首先會從原理上出發(fā)土至,講解iOS系統(tǒng)是如何啟動APP的,然后從main函數(shù)之前和main函數(shù)之后倆個角度去分析如何優(yōu)化啟動時間猾昆。 ...
@上帝不在服務(wù)區(qū) 元類存儲的是類相關(guān)的信息, 類存儲的是實例對象的信息, 那么如果是類方法調(diào)用, 自然是操作元類, 而元類也是Class類型, 不知道是不是因為這個, 造成了類對象的isa指向NSArray類的筆誤(沒惡意)?
iOS Runtime:Class 和 meta-class1陶因、Class Objective-C類是由Class類型來表示的,它實際是一個指向objc_class結(jié)構(gòu)體的指針垂蜗。它的定義如下 objc_class結(jié)構(gòu)體定義如下: 在這...
交換方法的中最好要在執(zhí)行自己的方法, 簡單說A<->youFunc互換, youFunc中要執(zhí)行[self youFunc], 這樣別人在A中就可以添加操作了, 并不需要交換回來.
iOS開發(fā)·runtime原理與實踐: 方法交換篇(Method Swizzling)(iOS“黑魔法”楷扬,埋點統(tǒng)計解幽,禁止UI控件連續(xù)點擊,防奔潰處理)本文Demo傳送門:MethodSwizzlingDemo 摘要:編程烘苹,只了解原理不行躲株,必須實戰(zhàn)才能知道應(yīng)用場景。本系列嘗試闡述runtime相關(guān)理論的同時介紹一些實戰(zhàn)場景镣衡,...
@PerryMorning 首先要弄清楚是所有的局部變量的指針都在棧區(qū), 而值還要看這個對象的創(chuàng)建方式是否用到了new 或者 alloc, 絕大部分用到的都在堆區(qū), 少部分經(jīng)過編譯器處理的依然還會在原來的位置. 其次要弄清楚動態(tài)分配內(nèi)存的時候, 會根據(jù)系統(tǒng)位數(shù)以及對象的大小判斷使用傳統(tǒng)存儲方式還是Tagged Pointer方式, 傳統(tǒng)意義上來說要分清對象的值和對象的指針這兩個概念, 對象的指針指向了對象的值所在的地址, 而指針也需要存儲空間, 也就是說在伴隨對象創(chuàng)建的時候, 會申請一塊空間同時存儲指針和值這兩個東西, 而 Tagged Pointer 簡單說就是把指針和值同時存儲在了一個地址上, 而這個地址每一位都有自己所代表的意義, 能把它當(dāng)對象使用也是因為它有對象的指針信息以及值信息, 因為它不是對象所以沒有isa指針. 另外就內(nèi)存分配而言, 棧地址高于堆地址.
深入理解Tagged Pointer在調(diào)試程序或者反編譯App時,經(jīng)撑且纾可以看到"NSTaggedPointerString"這個東西例如: 打印: 這里首先會有兩個問題:1.為什么創(chuàng)建出來的地址分為兩種?2.t...
這個地方要解釋兩個部分:
1. performSelect:底層調(diào)用
- performSelect: 方法底層判斷了傳入的 sel 是否存在, 不存在報方法不存在, 存在調(diào)用 msgSend:方法發(fā)送消息.
2. msgSend: 原理
- 發(fā)送消息是會查詢當(dāng)前 Class 的 methodList 中是否有與 sel 相對應(yīng)的方法實現(xiàn), 如果有直接執(zhí)行(會忽略消息轉(zhuǎn)發(fā)). 如果沒有, 判斷動態(tài)解析中是否新的方法實現(xiàn), 如果沒有才去執(zhí)行 forwardingTargetForSelector: 走消息轉(zhuǎn)發(fā)流程, 因此圖中的 '返回YES | 返回NO', 說的并不是方法的返回值.
iOS Runtime詳解Runtime的特性主要是消息(方法)傳遞助被,如果消息(方法)在對象中找不到,就進(jìn)行轉(zhuǎn)發(fā)切诀,具體怎么實現(xiàn)的呢揩环。我們從下面幾個方面探尋Runtime的實現(xiàn)機(jī)制。 Runtime介紹...
Runtime的特性主要是消息(方法)傳遞幅虑,如果消息(方法)在對象中找不到丰滑,就進(jìn)行轉(zhuǎn)發(fā),具體怎么實現(xiàn)的呢倒庵。我們從下面幾個方面探尋Runtime的實現(xiàn)機(jī)制褒墨。 Runtime介紹...
name 傳 @"", 你傳nil不會報警告嗎?
深入理解iOS NSNotificationNSNotification在平時開發(fā)中使用非常頻繁绍申。網(wǎng)上關(guān)于NSNotification介紹大多是停留在用法的介紹噩咪,基本上沒有深入介紹NSNotification原理的文章...