原创 Category分類添加成員變量

思考:如何實現給分類“添加成員變量”? 默認情況下,因爲分類底層結構的限制,不能添加成員變量到分類中。但可以通過關聯對象來間接實現。 我們現在來一步步分析:如下 // RMPerson類 @interface RMPerson : N

原创 Category底層實現源碼剖析

一、Category概念? Category是Objective-C 2.0之後添加的語言特性,分類、類別其實都是指的Category。Category的主要作用是爲已經存在的類添加方法。 可以把類的實現分開在幾個不同的文件裏面,這樣

原创 block-對象類型的auto變量

從上些章節block-變量的捕獲(caputer)中,詳細說了基本類型的auto變量的捕獲,現在來了解下,對象類型的auto變量是怎樣捕獲和底層結構是如何的。 block自動copy的情況 在ARC環境下,編譯器會根據情況自動將棧上的b

原创 block-類型

從《block-底層數據結構》中,我們知道block的本質就是就是OC對象,他也有isa指針,它既然是對象,那它是屬於什麼類型呢?那這章節,我們來探討下block的類型 block有三種類型,可以通過調用class方法或者isa指針查看具

原创 Objective-C Runtime 運行時之三:方法與消息

前言 前面我們討論了Runtime中對類和對象的處理,及對成員變量與屬性的處理。這一章,我們就要開始討論Runtime中最有意思的一部分:消息處理機制。我們將詳細討論消息的發送及消息的轉發。不過在討論消息之前,我們先來了解一下與方法相關的

原创 RAC學習一 RACSignal、RACSubject、RACSubscriber、RACDisposable

概念 RAC全稱-ReactiveCocoa,是GitHub上的一個開源框架,普遍稱之爲“函數的響應式編程”,想詳細瞭解什麼爲什麼叫做函數式響應編程,看 袁崢的這邊文章https://www.jianshu.com/p/87ef6720a

原创 block-循環引用

block的循環引用,在日常開發中,我們常常遇到,但是可能部分新人還不太瞭解爲何會循環引用,到底是如何循環引用理解得不夠透徹,並且在ARC環境下只知道用__weakSelf去解決,但也不知道原因,現在我們來剖析一下,循環引用的的底層原理。

原创 block-變量的捕獲(capture)

爲了能夠保證block正常訪問外部的變量,block有個變量捕獲機制,如下圖 auto:自動變量,平時我們定義int age = 10,前面有個auto,auto int age = 10,系統幫我們默認的加上了一個auto。—–值傳遞

原创 xcode8 使用Instruments檢測定位並解決iOS內存泄露

簡介: 雖然蘋果出了ARC(自動內存管理機制),我們不用花太多的時間在內存泄漏的問題上,但在我們開發的過程中,還是會因爲各種原因而產生內存泄漏,例如Block的循環引用,delegate 寫成了 strong,定時器沒有關閉,弱指針使用不

原创 iOS 成員變量,實例變量,屬性變量的區別,聯繫

這幾個概念往往知道了 過不了多久又忘  可能是因爲平時並沒有特別需要區分的地方  一般都用屬性  某些時候可能會用到成員變量  ; 因爲平時在寫代碼中並不需要過於區分  這可能是經常記住理解後又忘的原因吧; 但是很多文章 裏面又提及到了

原创 KVO窺探其底層實現

概念 KVO的全稱是Key-Value- Observing,俗稱“鍵值監聽”,可以用於監聽某個對象屬性值的改變。 本質 利用RuntimeAPI動態生成一個子類,並且讓改instance對象的isa指向這個全新的子類 當修改對象的屬性

原创 iOS通用庫--常用功能二之下拉選擇框的封裝

一、前言 本章節,主要是講述下拉選擇框的封裝,因爲在開發中用得很多,也很常見,所以作了一個簡潔的封裝。 長話短說,上圖,上代碼,主要側重於邏輯和封裝的細節 二、框架,核心類介紹 圖1是下拉選擇框大體框架 圖2是下拉選擇框的核心類Dro

原创 block-__block修飾符和__block內存管理

一、__block修飾符的特點 1.__block可以用於解決block內部無法修改auto變量值的問題 2.__block不能修飾全局變量、靜態變量(static) 因在block的內部是無法修改外部的auto變量的,所以需要通過__

原创 RAC學習二-RACReplaySubject

上圖是RACSubject和RACReplaySubejct訂閱信號的方法,RACReplaySubject是繼承自RACSubject,所以RACReplaySubject既可以當做信號又可發送信號,但與RACSubject不同的是,

原创 RAC學習四-RAC學習四(RAC常用方法)

1.代替代理 /* 1.代替代理 */ self.textField.delegate = self; [[self rac_signalForSelector:@selector(textFieldDidBeginEditing:)f