原创 RAC中的宏定義學習

RAC 的中有提示的宏定義的寫法 // - RACObserve的聲明 #if __clang__ && (__clang_major__ >= 8) #define RACObserve(TARGET, KEYPATH) _R

原创 QTEventBus 源碼心得

原理 : QTEventBus 將事件根據 key 保存到一個 array 中, 在發送事件時候, 查找map 中 key 對應的 array, 然後遍歷 array調用事件 使用 block 實現鏈式編程, 這個在項目中用的很

原创 C 語言指針最強解析

// - 在 C語言中, 函數之間傳值時候, 想改變誰的值, 就傳遞誰的地址(也就是誰*類型); 傳遞了誰的地址, 就可以改變誰 比如, 要改變的數據是 int 類型, 那麼傳遞的參數是 (int *), 要改變的數據是 (int

原创 mac 常用的軟件雜談

雜談 010Editor 無法使用的問題修復 創建 shell 腳本 cleanCaches.sh 並將 rm -rf ~/Library/Application\ Support/SweetScape/010\ Editor

原创 iOS Block 底層原理

Block 結構體寫法 struct __block_impl { void *isa; int Flags; int Reserved; void *FuncPtr; }; struct __main_bl

原创 iOS 中圖片和其他格式的文件的互相轉換

CVImageBufferRef (RGB)轉爲UIImage - (UIImage *)imageFromRGBImageBuffer:(CVImageBufferRef)imageBuffer { CVPixelBuf

原创 iOS class 和 instance 底層原理

查看類的本質 // - 本質上OC對象就是結構體… 2. 實例對象, 類對象 元類對象的關係 // - 實例對象的 isa -> 類對象; 類對象的 isa -> 元類對象; // - 子類(實例, 類, 元類)對象的 su

原创 遊戲逆向的前期準備

工具 IDA pro 這個就不解釋了,至於爲什麼不用Hopper,後面會看到需要IDA來執行python腳本,給函數綁定符號 ida pro的牛逼插件keypatch 用於修改彙編代碼 https://github.com/k

原创 開發中使用的語言技巧

result 的值變化範圍是 0 - valueRange / 2, valueRange / 2 - 0, 0 - valueRange / 2, valueRange / 2 - 0; static int rote =

原创 xcode 調試openGLES

整體調試模塊介紹 頂點信息 VAO信息 着色器程序

原创 GPUImage鏈式紋理的簡單實現

鏈式 shader 的實現 實現鏈式 shader 的核心思路利 : 用幀緩衝對象,將幀緩衝對象生成的紋理單元最爲下一個 shader 紋理的輸入; 源碼 幀緩衝的實現核心 /** 設置幀緩衝對象 */ -(void)setupt

原创 view中巧用響應鏈

// - 方案一 -(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{ if (CGRectContainsPoint(self.subView.f

原创 將字符串轉爲16進制字符串並顯示出來

將字符串轉爲16進制字符串並顯示出來 // - 發送的字節 5d0000005d000000b1020000xxxxxxx00 5d000000 : 發送內容長度 (內容長度 = (5d000000 內容長度 4字節) + (b1

原创 使用YUV顏色空間將CMSampleBufferRef轉換爲UIImage

-(UIImage *) imageFromSamplePlanerPixelBuffer:(CMSampleBufferRef) sampleBuffer{ @autoreleasepool { //

原创 C 語言指針

// - 在 C語言中, **函數之間傳值時候, 想改變誰, 就傳遞誰的地址; 傳遞了誰的地址, 就可以改變誰** 比如, **要改變的數據是 int 類型, 那麼傳遞的參數是 int *, 要改變的數據是 int *類型 , 則