原创 isa superclass的總結

如下圖  

原创 獲取線程堆棧剩餘大小

#import <pthread.h> pthread_t currentThread = pthread_self(); uint8_t *endStack = pthread_get_stackaddr_np(currentThrea

原创 剖析ARM64下的objc_msgSend

本文來自 Mad_Mark的簡書 ,作者 sasukeo 原文 原文:Dissecting objc_msgSend on ARM64 原文作者:Mike Ash 本文結合原文評論區Greg Parker的評論略做修改。 建議結合objc

原创 線程標識獲取方法

性能優化的開發中經常需要獲取線程標識,這篇文章簡單羅列和對比了四種獲取線程標識的方法。 四種方法 這四種方法如下: // <NSThread: 0x283903000>{number = 1, name = main} [[NSThre

原创 一種延遲 premain code 的方法

大量的premain代碼,不可控,在線上隨時都是炸彈。爲了讓開發者過渡的更“透明“,有了下面的方法。   想法來源仍然是兩年前的三篇分析Facebook客戶端的文章:   1- 探索 facebook iOS 客戶端 - section

原创 fishhook源碼解析

前言 fishhook是fackbook開源的一個用來hook c函數的庫。在iOS開發中我們一般都是對OC方法進行hook,這是因爲OC的動態特性才能實現的,OC的方法調用是在運行時動態查找的。而c函數是靜態,爲什麼同樣能夠hook呢?

原创 load和initialize方法的區別

一、調用方式 1、load 是根據IMP直接調用 2、initialize是通過objc_msgSend調用 二、調用時刻 1、load是runtime加載類、分類的時候調用(只調用一次) 2、initialize類第一次接收消息的時候調

原创 isa的地址

struct NSObject_IMPL {     Class isa; }; NSObject *object = [[NSObject alloc] init]; struct NSObject_IMPL *obj = (__bri

原创 獲取任意線程調用棧的那些事

原文鏈接:https://bestswifter.com/callstack/ BSBacktraceLogger 是一個輕量級的框架,可以獲取任意線程的調用棧,開源在我的 GitHub,建議下

原创 mmap

原文鏈接:https://mp.weixin.qq.com/s/zTDJY9mZOe7PPP4A2u3-Lw mmap是性能優化的必備神器,這篇文章簡單羅列下相關信息。 mmap是什麼 簡單通俗

原创 Hook static initializers

原文鏈接:https://mp.weixin.qq.com/s?__biz=MzUxMTkwNDg0OQ==&mid=2247483712&idx=1&sn=39ba41961f13c5368294

原创 抖音研發實踐:基於二進制文件重排的解決方案 APP啓動速度提升超15%

原文鏈接:https://mp.weixin.qq.com/s/Drmmx5JtjG3UtTFksL6Q8Q 背景 啓動是App給用戶的第一印象,對用戶體驗至關重要。抖音的業務迭代迅速,如果放任

原创 由「抖音二進制文件重排」想到的

原文鏈接:https://mp.weixin.qq.com/s/_IZOXjwaeSmRJ2tcpdd8kg 2018年11月份,支付寶發佈了一篇文章《支付寶 App 構建優化解析:通過安裝包重

原创 最簡單的啓動任務分類

原文鏈接:https://mp.weixin.qq.com/s/znquBJwdrkPKfkIRJMmnYA 一個“有年頭”的App,啓動中要做的工作不斷的累加,didFinishLaunchi

原创 Hook所有+load方法(包括Category)

原文鏈接:https://mp.weixin.qq.com/s/QsDgg6gUSB7d9nF_kZOrng 大概兩年前剛開始做性能優化工作,爲了Hook所有+load方法,是用Hopper先列