原创 iOS-instancetype與id的區別以及alloc、init與new的區別

不管是iOS原生方法還是平時自己寫方法,都能碰到instancetype和id,那麼這兩者有何區別呢? 一、instancetype和 id的異同 相同點:instancetype是clang 3.5開始提供的一個關鍵字,跟id類

原创 iOS-雷達數據圖

這次簡單的寫一個關於雷達數據顯示的案列,實現簡單,主要用UIBezierPath以及CAShapeLayer,如下圖: 具體實現: 思路:如何繪製上圖中的六邊形?我們只需要確定最外層六邊形的邊長(確定大小)和六邊形的中心點的座標

原创 iOS-動態添加方法

動態添加方法可以在動態創建的類中添加也可以在已存在的類中添加,先來看下動態添加方法的定義函數: OBJC_EXPORT BOOL class_addMethod(Class _Nullable cls, SEL _Nonnull

原创 iOS - KVC底層應用

之前簡單得講過一些KVC的用法,但是並不能深入理解KVC內部實現及其原理,下面主要講下KVC的底層原理。 取值 valueForKey: 在使用KVC取值的時候,使用valueForKey:方法,該方法會返回一個id類型的對象,那

原创 iOS - 使用clang將Object-C代碼轉換爲C++代碼時 'UIKit/UIKit.h' file not found

問題 在MacOS項目下使用clang命令clang -rewrite-objc main.m可以把main.m文件轉換成C++文件,方便研究內部實現。但是如果是iOS項目的話執行上面clang命令就會報出下面錯誤: shiyud

原创 iOS-Masonry實現原理

爲視圖添加約束的方法有很多,可以使用系統原生的約束方法,即NSLayoutConstraint約束類;可以使用storyboard添加約束;甚至使用CGRectGetMaxY(rect)的若干方法爲視圖佈局。這次我們要說的是使用純

原创 iOS-動態創建類

在運行時動態創建一個類: 導入頭文件#import <objc/runtime.h>,動態添加類,創建一個繼承 NSString 的類NSStringSubClass類,如下代碼: // 類名也可以直接使用C字符串寫法 ”

原创 iOS-封裝系統通訊錄調用

在項目中有的地方會用到獲取通訊裏面的某個聯繫人的聯繫方式,這裏我們稍微封裝一下這個方法。 第一步:我們需要獲取通訊錄權限 在info.plist文件中,添加 key : Privacy - Contacts Usage Descr

原创 iOS-動態添加屬性

前一章介紹了動態創建類,這章主要講動態添加屬性。 一、動態添加實例變量Ivar: 通過函數class_addIvar()添加屬性,更準確的說是添加成員變量,函數定義如下 OBJC_EXPORT BOOL class_addIvar

原创 iOS-動態方法決議與消息轉發機制

在消息發送機制中我們介紹過,OC是動態語言,對象調用方法其實就是對象接收消息,而消息的發送採用“動態綁定”機制,具體會調用哪個方法直到運行時才確定,然後去執行綁定的代碼。 綁定的過程: 以下面代碼爲例 Person *p = Pe

原创 iOS - 線程中常見的幾種鎖

線程鎖主要是用來解決“共享資源”的問題,實際開發中或多或少的都會用到各類線程鎖,爲了線程的安全我們有必要了解常見的幾種鎖,下面是本人查看一些大牛的博客然後整理的內容,加上自己的一些見解,水平有限,如果不慎有誤,歡迎交流指正。 常見

原创 iOS-消息發送機制

在Object-C中,對象調用方法其實是對象接收消息,消息的發送採用"動態綁定"機制,具體會調用哪個方法直到運行時才能確定,確定後纔會去執行綁定的代碼。 OC調用方法的形式如下: Person *p = Person.new; [

原创 iOS-類和對象之本質

iOS界比較流行的一句話:萬物皆對象!爲什麼會有這麼一個說法呢?難道類(class)也是對象(object)?對象其本質又是什麼?這些問題在實際開發中或許遇不到,但當真的涉及到底層的開發,就要面對這些問題。想要透析對象的本質,就要

原创 iOS-線程同步的幾種方式

在多線程開發中數據的安全是非常重要的,在開闢分線程執行耗時操作以保證主線程不阻塞的同時,數據的安全也要保證才行。如果同一個資源(一個變量或者一段代碼或者存儲的數據等)同時被多個線程訪問修改,可能會造成數據的錯亂,得到的也就不是自己

原创 iOS -多線程之pthread

pthread是POSIX thread的簡寫,一套通用的多線程API,適用於Unix、Linux、Windows等系統,跨平臺、可移植,使用難度大的C語言框架,線程生命週期由程序員管理,百度百科上有詳細的介紹。在多線程方面iOS