一、前言 轉(zhuǎn)載請注明出處 本文主要是在iOS端的角度來看Kotlin-Native是如何進(jìn)行內(nèi)存管理的,需要捋清楚OC實例和kotlin實例的對應(yīng)關(guān)系,以及在兩個不同的Run...
一、前言 轉(zhuǎn)載請注明出處 本文主要是在iOS端的角度來看Kotlin-Native是如何進(jìn)行內(nèi)存管理的,需要捋清楚OC實例和kotlin實例的對應(yīng)關(guān)系,以及在兩個不同的Run...
前言 為什么要寫這篇文章?在開發(fā)Kotlin或Compose時,我們無法避免與協(xié)程打交道,例如常用的LaunchedEffect、網(wǎng)絡(luò)請求、磁盤數(shù)據(jù)讀取等等。在Launche...
1. 背景 本篇文章完成于2023年初,公司內(nèi)部信息已做脫敏處理 2022年10月中旬Apple針對iOS逐步推出了16.1系統(tǒng),動態(tài)布局SDK的iOS端在穩(wěn)定運行了很長時間...
公司內(nèi)部項目不方便提供源碼
Metal基礎(chǔ)入門一、背景和技術(shù)選型 關(guān)于技術(shù)方案的選型,最權(quán)威的肯定是Metal for OpenGL Developers[https://developer.apple.com/vide...
一、背景 首先要知道鏈接是干什么的。我們可以通過IDE寫一部分代碼,也需要從其他的Libray或者FrameWork使用第三方提供的代碼。為了能夠用到這些三方代碼,我們需要一...
一、背景和技術(shù)選型 關(guān)于技術(shù)方案的選型,最權(quán)威的肯定是Metal for OpenGL Developers[https://developer.apple.com/vide...
前言 本文是對OpenGL Projection Matrix一文的中文翻譯,初衷是因為自己學(xué)習(xí)OpenGL時,對投影變形的數(shù)學(xué)推導(dǎo)比較感興趣,因此找到了該文章。而本文并不是...
這個node是從最后一個非葉子節(jié)點開始的,比如上面淺黃色標(biāo)出的節(jié)點。就是說需要遍歷所有非葉子節(jié)點。而這個的目的是為了維持最大堆的性質(zhì),我理解這并不是重復(fù)創(chuàng)建。
最大堆(創(chuàng)建、刪除、插入和堆排序)關(guān)于最大堆 什么是最大堆和最小堆?最大(小)堆是指在樹中,存在一個結(jié)點而且該結(jié)點有兒子結(jié)點,該結(jié)點的data域值都不小于(大于)其兒子結(jié)點的data域值,并且它是一個完全二叉...
@syx_b2ff 在symbol table里面每一個符號實體,他們首個offset都是以0x10遞增的。你在indirect symbol的data值乘以0x10,然后加上symbol table的首地址就可以得到indirect symbol里面對應(yīng)符號在符號表中的位置了
iOS逆向工程 - fishhook原理fishhook是Facebook提供的一個動態(tài)修改鏈接mach-O文件的工具。利用MachO文件加載原理,通過修改懶加載和非懶加載兩個表的指針達(dá)到C函數(shù)HOOK的目的。 前...
processon
A Malloc Tutorial前言 本篇文章是對該文章的翻譯,如有疑問可對照原文。 一、介紹 什么是malloc?如果連這個名兒都沒有聽說的話,那么應(yīng)該在讀這篇文章之前先去學(xué)習(xí)一下Unix環(huán)境下的C語言。...
前言 本篇文章是對該文章的翻譯,如有疑問可對照原文。 一、介紹 什么是malloc?如果連這個名兒都沒有聽說的話,那么應(yīng)該在讀這篇文章之前先去學(xué)習(xí)一下Unix環(huán)境下的C語言。...
用的starUML
細(xì)看objc-weak源碼本文不看其他,只專注于weak的內(nèi)部結(jié)構(gòu)實現(xiàn)細(xì)節(jié)和源碼解讀,看了網(wǎng)上很多的文章都是貼上一篇open source里面的代碼,并沒有對實現(xiàn)細(xì)節(jié)進(jìn)行解釋。所以在這篇文章中,主要分...
@CXYMichael 所以提供這種API只是方便了使用使用啊,我覺得這樣做反而會誤導(dǎo)使用者
最大堆(創(chuàng)建、刪除、插入和堆排序)關(guān)于最大堆 什么是最大堆和最小堆?最大(?。┒咽侵冈跇渲?,存在一個結(jié)點而且該結(jié)點有兒子結(jié)點,該結(jié)點的data域值都不小于(大于)其兒子結(jié)點的data域值,并且它是一個完全二叉...
@CXYMichael 這時間復(fù)雜度和維持完全二叉樹有什么差別呢?
最大堆(創(chuàng)建、刪除、插入和堆排序)關(guān)于最大堆 什么是最大堆和最小堆?最大(?。┒咽侵冈跇渲?,存在一個結(jié)點而且該結(jié)點有兒子結(jié)點,該結(jié)點的data域值都不小于(大于)其兒子結(jié)點的data域值,并且它是一個完全二叉...
@CXYMichael 據(jù)我了解Java存在的弊端是為了使用者方便,并不會考慮到時間復(fù)雜度等。就好像在C++里面vector和list同樣都是順序容器,但是vector就不支持push_front,而list卻支持。但是Java里面為了達(dá)到統(tǒng)一的效果就會讓數(shù)組(向量)支持頭部插入,這樣帶來的問題是會增加極大的消耗。好了回答你第一個問題:我舉這個例子的目的是想說你怎么操作都能做,但是刪除根節(jié)點是能達(dá)到時間復(fù)雜度為O1。刪除其他節(jié)點明顯是沒有這么高效的。第二個問題:你刪除了任何一個節(jié)點以后不進(jìn)行樹節(jié)點的移動,怎么保證這是一顆完全二叉樹呢?
最大堆(創(chuàng)建、刪除、插入和堆排序)關(guān)于最大堆 什么是最大堆和最小堆?最大(?。┒咽侵冈跇渲校嬖谝粋€結(jié)點而且該結(jié)點有兒子結(jié)點,該結(jié)點的data域值都不小于(大于)其兒子結(jié)點的data域值,并且它是一個完全二叉...
哨兵就是在數(shù)據(jù)結(jié)構(gòu)里面經(jīng)常提到的一個角色,通常用于保存一下輔助信息這些。如果存在哨兵的話,一般存儲數(shù)據(jù)是從下標(biāo)為1開始。
最大堆(創(chuàng)建、刪除、插入和堆排序)關(guān)于最大堆 什么是最大堆和最小堆?最大(?。┒咽侵冈跇渲?,存在一個結(jié)點而且該結(jié)點有兒子結(jié)點,該結(jié)點的data域值都不小于(大于)其兒子結(jié)點的data域值,并且它是一個完全二叉...