From edbbdd69997584966d8c3ea74f85be7029b72286 Mon Sep 17 00:00:00 2001 From: Sunny Date: Tue, 16 May 2023 15:54:21 +0800 Subject: [PATCH] Site updated: 2023-05-16 15:54:21 --- 404.html | 4 +- archives/2022/05/index.html | 9 +- archives/2022/06/index.html | 9 +- archives/2022/07/index.html | 9 +- archives/2022/08/index.html | 9 +- archives/2022/11/index.html | 9 +- archives/2022/12/index.html | 9 +- archives/2022/index.html | 9 +- archives/2022/page/2/index.html | 9 +- archives/2023/01/index.html | 9 +- archives/2023/02/index.html | 9 +- archives/2023/05/index.html | 271 +++++ archives/2023/index.html | 9 +- archives/index.html | 9 +- archives/page/2/index.html | 9 +- articles/index.html | 7 +- atom.xml | 119 +-- baidu_urls.txt | 1 + baidusitemap.xml | 18 +- categories/Hexo/index.html | 9 +- categories/PS/index.html | 9 +- categories/iOS/index.html | 9 +- categories/iOS/page/2/index.html | 9 +- categories/iOS/page/3/index.html | 9 +- categories/index.html | 7 +- .../index.html" | 9 +- .../\351\200\206\345\220\221/index.html" | 9 +- index.html | 73 +- link/index.html | 7 +- music/index.html | 29 +- page/2/index.html | 49 +- page/3/index.html | 44 +- page/4/index.html | 64 +- page/5/index.html | 34 +- pictures/index.html | 9 +- pictures/wallpaper/index.html | 9 +- pictures/wallpaper1/index.html | 9 +- pictures/wallpaper2/index.html | 9 +- posts/132ad7d9/index.html | 6 +- posts/1bf7fb0b/index.html | 6 +- posts/23c5d0e7/index.html | 6 +- posts/37cd28e5/index.html | 4 +- posts/38437bd9/index.html | 351 +++++++ posts/391caf66/index.html | 6 +- posts/39324100/index.html | 6 +- posts/4223b330/index.html | 4 +- posts/431bd9b3/index.html | 4 +- posts/47556fe7/index.html | 6 +- posts/4a47f2ea/index.html | 4 +- posts/52ee9edd/index.html | 4 +- posts/57c4c4a9/index.html | 4 +- posts/62e3ee95/index.html | 4 +- posts/62fa33fe/index.html | 4 +- posts/67d22871/index.html | 6 +- posts/70b04f6f/index.html | 4 +- posts/745be31f/index.html | 6 +- posts/7495500c/index.html | 4 +- posts/7df93f3b/index.html | 6 +- posts/8583d944/index.html | 6 +- posts/8948fead/index.html | 6 +- posts/8f7262c3/index.html | 4 +- posts/94e6df10/index.html | 4 +- posts/9efafc5a/index.html | 4 +- posts/9fce234e/index.html | 4 +- posts/a2dbd15f/index.html | 4 +- posts/a5190dfd/index.html | 4 +- posts/a5b508b2/index.html | 4 +- posts/b38791c9/index.html | 6 +- posts/b55a18a8/index.html | 6 +- posts/b55c64d0/index.html | 4 +- posts/baafbb5e/index.html | 4 +- posts/beccfc53/index.html | 6 +- posts/c0e79a01/index.html | 4 +- posts/d1a1e187/index.html | 6 +- posts/da31eaeb/index.html | 6 +- posts/da46549b/index.html | 4 +- posts/dfd029e5/index.html | 6 +- posts/e94df8dd/index.html | 4 +- posts/f68de671/index.html | 6 +- posts/feb84685/index.html | 4 +- search.xml | 971 ++++++++++-------- sitemap.txt | 9 +- sitemap.xml | 71 +- tags/Butterfly/index.html | 9 +- tags/Diff/index.html | 9 +- tags/Hexo/index.html | 9 +- tags/IGListKit/index.html | 9 +- tags/LCS/index.html | 9 +- tags/PS/index.html | 9 +- tags/Runtime/index.html | 9 +- tags/iOS/index.html | 9 +- tags/iOS/page/2/index.html | 9 +- tags/iPhone/index.html | 9 +- tags/index.html | 7 +- "tags/\344\274\230\345\214\226/index.html" | 9 +- .../index.html" | 9 +- .../index.html" | 9 +- .../index.html" | 9 +- "tags/\346\225\231\347\250\213/index.html" | 9 +- .../index.html" | 9 +- "tags/\351\200\206\345\220\221/index.html" | 9 +- 101 files changed, 1779 insertions(+), 926 deletions(-) create mode 100644 archives/2023/05/index.html create mode 100644 posts/38437bd9/index.html diff --git a/404.html b/404.html index 609547fb..af6ac371 100644 --- a/404.html +++ b/404.html @@ -51,7 +51,7 @@ isHome: false, isHighlightShrink: false, isToc: false, - postUpdate: '2023-03-21 19:03:28' + postUpdate: '2023-05-16 15:54:13' } +
加载中...
avatar
Sunny
千里之行,始于足下
公告
阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
\ No newline at end of file diff --git a/archives/2023/index.html b/archives/2023/index.html index a2900d71..50f860c8 100644 --- a/archives/2023/index.html +++ b/archives/2023/index.html @@ -51,7 +51,7 @@ isHome: false, isHighlightShrink: false, isToc: false, - postUpdate: '2023-03-21 19:03:28' + postUpdate: '2023-05-16 15:54:13' } +
加载中...

【iOS重学】制作.a静态库和.framework静态库最全流程

写在前面

+

本文记录的主要有两点:

+
    +
  • .a静态库的制作流程以及使用
  • +
  • .framework静态库的制作流程以及使用
  • +
+

制作.a静态库

+

第一步:Xcode新建项目 - Frame & Library - Static Library。

+

1

+

第二步:博主这里取名为:StaticLibrary,这里出现的两个文件没有用可以删掉。

+

2

+

第三步:把想要打成静态库的文件放在StaticLibrary文件夹下面,博主这里以WWPerson文件为例。

+

3

+

第四步:修改BuildSetting配置,将Build Active Architeture Only 设置为NO

+

4

+

第五步:添加需要暴露在外面的.h文件,.m文件会自动编译到.a文件中。

+

5

+

在未添加之前是下图所示:

+

6

+

点击+添加,添加之后:

+

7

+

8

+

需要注意的是:这里需要暴露的.h文件需要放在Public列表栏里面。

+

第六步:Edit Scheme - 模式改为release模式。

+

9

+

第八步:分别在真机和模拟器上都要Command+B编译,编译之后我们可以看到如下内容。

+

10

+

其中,Release-iphoneos代表的是真机下的静态库文件,Release-iphonesimulator表示的是模拟器下的静态文库文件。

+

温馨提示

+
    +
  1. 在模拟器上编译静态库时最好选择高端一点的设备,这样低端设备也可以用,如果选择低端设备可能会出现在高端模拟器上出现错误等问题。
  2. +
  3. 通过Xcode -Preferences- Location 可以找到上面的静态库内容。
  4. +
+

11

+
+

到这里静态库的制作方法就基本完成了,但是还有一个重要的问题我们还没有解决,那就是模拟器和真机下的静态库需要合并,接下来我们看一下如何合并静态库。

+

合并静态库

+
    +
  • 新建一个文件夹用来存放真机和模拟器下打包出来的静态库,博主这里新建一个“合并静态库”的文件夹
  • +
+

12

+
    +
  • 打开终端,在终端输入lipo -create 模拟器下的.a 真机下的.a -output 新合并的静态库的存放路径,如下:
  • +
+

13

+

温馨提示

+

如果在合并的过程中有人碰到跟博主一样的错误的话,请按照下面的方式修改Xcode配置,然后重新编译生成新的.a静态库:

+

14

+

出现错误的原因在于:在Xcode12之后编译的模拟器静态库也支持arm64,会导致真机和模拟器有相同的支持架构arm64,这也就导致模拟器和真机不能合并的问题。

+

上面Xcode设置就是将arm64架构移除。

+
+
    +
  • 合并之后,可以在目标文件夹下看到我们刚合并的静态库:
  • +
+

15

+
    +
  • 可以使用lipo -info看一下我们打出来的这个静态库支持的架构是哪些:
  • +
+

16

+

.a静态库的使用

+

静态库的使用很简单,只需要将暴露在外面的.h文件和.a静态库放在项目中即可使用:

+

17

+

.framework静态库制作流程

+

第一步:Xcode新建项目 - Frame & Library - Framework。

+

18

+

配置framwork:

+
    +
  1. +

    Build Settings配置:

    +
      +
    • Product Name :可以修改名称,这里的名称是最终打包出来的framework的名称,博主这里叫PrintFramework
    • +
    • Mac-O Type:选择Static Library
    • +
    • Build Active Architeture Only:设置为NO
    • +
    • Base SDK:选择iOS
    • +
    • iOS Deployment Target:选择打包出来的framework最低支持的iOS版本。
    • +
    +
  2. +
  3. +

    Build Phases配置:

    +
      +
    • Copy Bundle Resource:在这里面添加 framework项目使用到的一些资源文件,包括:xibplist、图片等。
    • +
    • Link Binary With Libraries:在这里面添加 framework项目的依赖库。
    • +
    • Compile Sources framework项目包含的实现文件。
    • +
    • Headers:将要暴露出来的头文件放在public 下,不需要暴露在外面的头文件放在project下。
    • +
    +
  4. +
+
+

第二步:如果项目中用到了图片、Xib等资源时需要创建一个Bundle:File - New - Target - macOS - Bundle。

+

19

+

注意

+

在创建Bundle时的名称不能和framework的名称一样,一样会导致失败。

+

配置Bundle

+
    +
  • +

    选中BundleTarget,Product Name - 修改Bundle名称,博主这里叫PrintFramework

    +

    22

    +
  • +
  • +

    Base SDK:修改为iOS

    +
  • +
  • +

    Supported Platforms:修改为iOS

    +
  • +
  • +

    Enable Bitcode:设置为NO

    +
  • +
  • +

    COMBILE_HIDPI_IMAGES:设置为NO。(避免Bundle中的图片变成tiff格式而无法使用)

    +
  • +
+
+

第三步:将创建好的Bundle添加到framework项目的依赖中去。

+

23

+

第四步:Edit Scheme - 模式改为release模式。

+

第五步:分别在真机和模拟器下编译framework项目,得到两个文件如下:

+

24

+

到这里,我们制作的framework静态库就基本完成,接下来就是和制作.a静态库一样需要合并静态库,博主这里久不过多阐述了,按照上面的方式产生新的framework静态库。

+

21

+

第六步:将新合并的framework文件替换掉之前的xxx.framework中的framework文件。

+

.framework静态库使用

+

将打包出来的xxx.frameworkBundle导入项目中即可使用:

+

25

+

到这里,关于.framework静态库的制作方法就结束了。

+

写在最后

+

iOS中关于制作.a.framework静态库的流程到这里就基本结束了,下一篇文章博主将来详细讲一下静态库和动态库的区别。

+
文章作者: Sunny
文章链接: https://codersunny.com/posts/38437bd9/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Sunny
千里之行,始于足下
公告
阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
\ No newline at end of file diff --git a/posts/391caf66/index.html b/posts/391caf66/index.html index d48d45bc..e5d8c8eb 100644 --- a/posts/391caf66/index.html +++ b/posts/391caf66/index.html @@ -145,7 +145,7 @@ } detectApple() })(window) -
加载中...

【Hexo】Butterfly主题配置(持续更新)

升级建议

+
加载中...

【Hexo】Butterfly主题配置(持续更新)

升级建议

为了减少升级以后带来的不便,建议请按照下面的方式进行操作:

在博客根目录下创建一个文件:_config.butterfly.yml,并把butterfly主题目录下的_config.yml内容复制到该文件中(注意:复制的是butterfly主题目录下的_config.yml不是博客根目录中的_config.yml)。

以后只需要在_config.butterfly.yml文件里进行修改即可。

@@ -242,10 +242,10 @@

查看大图配置

# Lightbox (图片大图查看模式)
# You can only choose one, or neither (只能选择一个 或者 两个都不选)

# medium-zoom
# https://github.com/francoischalifour/medium-zoom
medium_zoom: false

# fancybox
# http://fancyapps.com/fancybox/3/
fancybox: true

显示效果如下:

20220514_01_17

-

最后

+

最后

基本上到这里,关于butterfly主题的一些基础配置就可以了,关于更多的模块配置可以参考butterfly主题官方文档

官方文档永远是最好的学习资料。

-
文章作者: Sunny
文章链接: https://codersunny.com/posts/391caf66/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Sunny
千里之行,始于足下
公告
阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
-
加载中...

【iOS重学】方法缓存cache_t的分析

写在前面

+
加载中...

【iOS重学】方法缓存cache_t的分析

写在前面

本文我们主要来分析一下方法缓存cache_t的数据结构是什么样的,苹果是怎么实现方法缓存的。

Class的结构

【iOS重学】窥探Class的结构文中,我们主要分析了Class的结构,结构主要如下:

@@ -236,11 +236,11 @@

具体场景

2022-12-22 15:24:41.305299+0800 RuntimeDemo[80143:9031426] 索引值:0 - SEL:personTest2 - IMP:0xb540
2022-12-22 15:24:41.305390+0800 RuntimeDemo[80143:9031426] 索引值:1 - SEL:(null) - IMP:0x0
2022-12-22 15:24:41.317936+0800 RuntimeDemo[80143:9031426] 索引值:2 - SEL:(null) - IMP:0x0
2022-12-22 15:24:41.318011+0800 RuntimeDemo[80143:9031426] 索引值:3 - SEL:(null) - IMP:0x0
2022-12-22 15:24:41.318081+0800 RuntimeDemo[80143:9031426] 索引值:4 - SEL:personTest1 - IMP:0xb5b0
2022-12-22 15:24:41.318147+0800 RuntimeDemo[80143:9031426] 索引值:5 - SEL:personTest3 - IMP:0xb510
2022-12-22 15:24:41.318214+0800 RuntimeDemo[80143:9031426] 索引值:6 - SEL:(null) - IMP:0x0
2022-12-22 15:24:41.318280+0800 RuntimeDemo[80143:9031426] 已缓存的方法个数:3 - 散列表实际长度:7

cache_t总结

方法缓存散列表其实就是利用空间来换时间,提高了方法查找的效率。

-

写在最后

+

写在最后

关于方法缓存的底层实现我们就写到这里了,希望对大家有所帮助,如有错误请多多指教。

-
文章作者: Sunny
文章链接: https://codersunny.com/posts/39324100/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Sunny
千里之行,始于足下
公告
阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

【iOS重学】KVO详解

KVO的基本使用

+
加载中...

【iOS重学】KVO详解

KVO的基本使用

基本使用

KVO:Key Value Observing(键值监听),用来监听某个对象属性值的改变。

// Person类
@interface Person : NSObject

@property (nonatomic, assign) int age;

@end

@implementation Person

@end

// KVOViewController
@interface KVOViewController ()

@property (nonatomic, strong) Person *person1;
@property (nonatomic, strong) Person *person2;

@end

@implementation KVOViewController

- (void)viewDidLoad {
[super viewDidLoad];

self.person1 = [[Person alloc] init];
self.person1.age = 10;

self.person2 = [[Person alloc] init];
self.person2.age = 20;

NSKeyValueObservingOptions options = NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld;
[self.person1 addObserver:self forKeyPath:@"age" options:options context:NULL];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
self.person1.age = 11;
self.person2.age = 21;
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
NSLog(@"%@对象的%@属性发生了改变:\n%@",object, keyPath,change);
}

// 打印结果:
2022-11-15 20:08:33.563589+0800 OC对象的本质[81675:15955895] <Person: 0x6000007519c0>对象的age属性发生了改变:
{
kind = 1;
new = 11;
old = 10;
}
@@ -216,7 +216,7 @@

KVO的触发场景

其他补充

如何查看某个方法的函数地址(IMP)?

- (IMP)methodForSelector:(SEL)aSelector;
+ (IMP)instanceMethodForSelector:(SEL)aSelector;
-
文章作者: Sunny
文章链接: https://codersunny.com/posts/4223b330/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

【 iOS重学】探究OC对象的本质

写在前面

+
加载中...

【 iOS重学】探究OC对象的本质

写在前面

苹果官方源码下载:opensource.apple.com/tarballs -> 搜索objc/4 -> 下载最新源码

Objective-C的本质

在iOS开发中如果我们使用OC编写的代码,其底层都是C/C++代码。

@@ -226,7 +226,7 @@

其他总结

2、sizeof是在编译阶段就需要确认的 是个运算符。

3、内存对齐是为了提高CPU的访问速度。

-
文章作者: Sunny
文章链接: https://codersunny.com/posts/431bd9b3/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Sunny
千里之行,始于足下
公告
阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
-
加载中...

【Hexo】Mac OS上使用Hexo + Github搭建博客教程

Hexo介绍

+
加载中...

【Hexo】Mac OS上使用Hexo + Github搭建博客教程

Hexo介绍

Hexo是一个快速、简洁且高效的博客框架,具体可以见Hexo官网,它在github上的star数现在已经到34.7k,Hexo主要有以下特点:

  1. 超快速度:Node.js所带来的超快生成速度,可以让上百个页面在几秒内完成渲染。
  2. @@ -253,10 +253,10 @@

    重新生成项目

    访问云端博客主页

    访问地址:https://happycodersunny.github.io

    20220509_20

    -

    最后

    +

    最后

    基本上到这里,属于我们自己的博客就搭建完成啦,撒花🎉🎉🎉~,整个搭建流程如果不出错半个小时之内其实是可以搞定的,但是这路哪里那么好走呢,每个人去搭建的过程中或多或少都会遇到一些问题,我自己在搭建的过程中也碰到了一些问题,我会抽空把遇到的问题详细整理出来,希望能够帮助大家如果要搭建博客的时候少踩点坑。

    嘻嘻嘻,都看到这里了,不要吝啬你的小星星嘛,为博主点个赞呐~

    -
文章作者: Sunny
文章链接: https://codersunny.com/posts/47556fe7/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

【iOS重学】消息发送的完整流程

写在前面

+
加载中...

【iOS重学】消息发送的完整流程

写在前面

​ 在OC里面,调用对象的某个方法其实就是给这个对象发送一个消息,这个过程我们把它分为三大阶段,分别为:消息发送阶段、动态解析阶段、消息转发阶段,本文将细细剖析这三个阶段,但是在剖析这三大阶段之前我们需要先回顾一下Class的结构。

Class结构

苹果源码最新下载地址请点击:苹果源码
@@ -203,7 +203,7 @@

关于NSInvocation

大家有兴趣的话可以去试试NSInvacation的使用。

最后

如果按照上面的三大流程都走完之后依然没有找到相应的方法实现,那这个调用最后就会调用doesNotRecognizeSelecto:抛出异常。

-
文章作者: Sunny
文章链接: https://codersunny.com/posts/4a47f2ea/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

【PS学习】文件基本操作

写在前面

+
加载中...

【PS学习】文件基本操作

写在前面

相关文章:1、初识PS界面

本篇主要讲一下PS中关于文件的一些操作,PS版本为【PS2020】。

文件的相关操作

@@ -218,7 +218,7 @@

如何为文件添加版权

2022070716

2

2022070718

-

文章作者: Sunny
文章链接: https://codersunny.com/posts/52ee9edd/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

【iOS重学】Block底层原理(二)

写在前面

+
加载中...

【iOS重学】Block底层原理(二)

写在前面

在上一篇文章【iOS重学】Block底层原理(一)中我们主要讲了Block的基本使用、底层原理、对变量的捕获机制以及Block的几种类型,本文是第二篇,主要内容包含:

  • __block修饰符的基本使用
  • @@ -226,7 +226,7 @@

    Block的循环引用

    这样我们就可以解决Block带来的一些循环引用的问题啦。

    写在最后

    关于Block的底层原理在这里就全部结束了,如有错误请多多指教。

    -
文章作者: Sunny
文章链接: https://codersunny.com/posts/57c4c4a9/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Sunny
千里之行,始于足下
公告
阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Sunny
千里之行,始于足下
公告
阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
-
加载中...

【iOS重学】离屏渲染

屏幕显示完整流程

+
加载中...

【iOS重学】离屏渲染

屏幕显示完整流程

2022080801

2022080802

整体渲染流程可以分为三个阶段:

@@ -271,7 +271,7 @@

组不透明(allowsGroupOpacity

总结

离屏渲染的处理仅仅是我们日常所关注的性能中的其中一个点,在处理的时候也要根据具体场景具体分析,要注意并不是所有的离屏渲染都是必须要去避免的,开辟额外的帧缓存虽然有一定的性能损耗,但是保存渲染结果并进行最终的视图显示也是为了保持视图的流畅性。

-
文章作者: Sunny
文章链接: https://codersunny.com/posts/62e3ee95/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

【iOS重学】从LCS到IGListKit框架中的Diff算法(下)

写在前面

+
加载中...

【iOS重学】从LCS到IGListKit框架中的Diff算法(下)

写在前面

在上一篇文章从LCS到IGListKit框架中的Diff算法(上)中我们详细讲了 LCSLCS 是什么、怎么使用动态规划来求解 LCSLCS ,最后我们也抛出了 LCSLCS 还存在的两个问题,本篇文章我们就主要来分析IGListKit框架中的Diff是如何来解决这两个问题的。

温馨提示:本文主要剖析IGListKit框架中的Diff算法,不会讲IGListKit框架的具体使用。

@@ -248,7 +248,7 @@

实际刷新举例说明

Insert: E
Update: D(A -> D)
Move: C
Delete: B

总结

看到这里,相信大家对IGListKit框架中Diff算法实现原理有了一个更加清晰的了解,这个算法的时间复杂度就变成了O(n)O(n),ICListKit框架就是通过这种刷新机制来提升了APP的整体性能。

-
文章作者: Sunny
文章链接: https://codersunny.com/posts/62fa33fe/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

【iOS重学】Block底层原理(一)

写在前面

+
加载中...

【iOS重学】Block底层原理(一)

写在前面

关于Block的底层原理相关东西,需要了解的东西比较多,所以博主这里打算用两篇文章来详细分析一下OC里面的Block,这是第一篇,内容主要包含:

  • Block的基本使用
  • @@ -247,9 +247,9 @@

    Block的copy操作

注意:MRC下Block使用copy关键字修饰,ARC下Block使用strong或copy都可以,建议使用copy,与MRC下保持一致。

-

写在最后

+

写在最后

关于Block底层原理的第一篇我们就分享到这里,如有错误请多多指教。

-
文章作者: Sunny
文章链接: https://codersunny.com/posts/67d22871/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

【PS学习】初识PS界面

写在前面

+
加载中...

【PS学习】初识PS界面

写在前面

我这里以【PS2020】和【Mac】为例来带大家初步认识PS,也顺便整理一下我之前学习PS的笔记。

初识PS界面

2022070501

@@ -195,7 +195,7 @@

如何修改网格的大小

如何在PS界面添加更多面板

-
文章作者: Sunny
文章链接: https://codersunny.com/posts/70b04f6f/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

【工具使用】Reveal工具的使用介绍

写在前面

+
加载中...

【工具使用】Reveal工具的使用介绍

写在前面

有时候我们可能想要分析其他APP的一些整体View结构,就像在Xcode分析我们自己的APP一样能够清楚看到个层级结构,Reveal这个APP主要就是这个功能:用来分析APP的层级结构。

Reveal

Reveal APP 官网:https://revealapp.com/

@@ -197,9 +197,9 @@

Reveal的使用

打开手机上的某个APP - 打开Reveal - 会在Reveal看到我们刚打开的APP 如下:

9

上面一个是通过网络连接、一个是通过USB连接,我们选择更快的USB连接即可使用Reveal。

-

写在最后

+

写在最后

关于Reveal使用前的配置就简单介绍到这里啦,如有错误请多多指教。

-
文章作者: Sunny
文章链接: https://codersunny.com/posts/745be31f/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Sunny
千里之行,始于足下
公告
阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Sunny
千里之行,始于足下
公告
阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
-
加载中...

【iOS逆向】Cycript的基本使用

写在前面

+
加载中...

【iOS逆向】Cycript的基本使用

写在前面

本文主要是介绍一下逆向中Cycript的基本用法。

简单介绍

Cycript是OC、C++、JS、Java等多种语法的一个混合物,它是用来探索、修改、调试当前正在运行的APP,这个在我们以后逆向的过程中会经常使用到,关于Cycript的更多介绍大家可以参考Cycript官网

@@ -236,7 +236,7 @@

MJCycript文件

14

写在最后

关于Cycript的简单介绍我们就分享到这里了,如有错误请多多指教。

-
文章作者: Sunny
文章链接: https://codersunny.com/posts/7495500c/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

【iOS逆向】如何让Mac和iPhone建立安全连接

写在前面

+
加载中...

【iOS逆向】如何让Mac和iPhone建立安全连接

写在前面

本文主要是记录一下在iOS逆向过程中,Mac是如何和iPhone建立安全连接来实现在Mac上可以通过命令行操作iPhone的。

SSH 和 OpenSSH

SSH:Secure Shell的缩写,意思为“安全外壳协议”,是一种可以为【远程登录】提供安全保障的协议,使用SSH可以把所有的数据加密,防止中间人攻击等欺骗。

@@ -203,9 +203,9 @@

方式二:通过USB连接

7

USB登录的整个流程如下图:

8

-

写在最后

+

写在最后

关于【如何让Mac和iPhone建立安全连接的两种方式】的文章就写到这里了,如有错误请多多指教。

-
文章作者: Sunny
文章链接: https://codersunny.com/posts/7df93f3b/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Sunny
千里之行,始于足下
公告
阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Sunny
千里之行,始于足下
公告
阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
-
加载中...

【iOS重学】KVC详解

KCV的基本使用

+
加载中...

【iOS重学】KVC详解

KCV的基本使用

// 设值
- (void)setValue:(id)value forKey:(NSString *)key;
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;

// 取值
- (id)valueForKey:(NSString *)key;
- (id)valueForKeyPath:(NSString *)keyPath;
// Student类
@interface Student : NSObject

@property (nonatomic, copy) NSString *name;

@end

// Person类
@interface Person : NSObject

@property (nonatomic, assign) int age;
@property (nonatomic, strong) Student *student;

@end

// 具体使用
Person *person = [[Person alloc] init];
person.student = [[Student alloc] init];
[person setValue:@(10) forKey:@"age"];
[person setValue:@"Sunny" forKeyPath:@"student.name"];

NSLog(@"age:%@ name:%@", [person valueForKey:@"age"], [person valueForKeyPath:@"student.name"]);

KVC的设值原理

@@ -181,9 +181,9 @@

KVC的取值原理

2

总结

按照上面流程都没有查找到对应的方法或成员变量可以赋值就是调用我们常见的一个方法:- (id)valueForUndefinedKey:(NSString *)key抛出异常。

-

写在最后

+

写在最后

关于iOS里面的KVC设值、取值的相关顺序就写到这里了,如有错误请指教。

-
文章作者: Sunny
文章链接: https://codersunny.com/posts/8583d944/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Sunny
千里之行,始于足下
公告
阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Sunny
千里之行,始于足下
公告
阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
-
加载中...

【 iOS重学】class_rw_ext_t结构详解

写在前面

+
加载中...

【 iOS重学】class_rw_ext_t结构详解

写在前面

iOS重学之窥探Class的结构这篇文章中,我们分析Class的结构时提到了一个结构class_rw_ext_t,本文主要就这个结构来展开做个详细的分析,以及苹果为什么要这么做。

class_rw_ext_t结构

简单介绍

@@ -183,9 +183,9 @@

查找方法的变化

class_rw_ext_t结构之后,runtime查找方法的方式如下图:

6

7

-

写在最后

+

写在最后

关于class_rw_ext_t结构的分析和好处我们就分析到这里了,如果有什么不对的地方望指教。

-
文章作者: Sunny
文章链接: https://codersunny.com/posts/8948fead/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Sunny
千里之行,始于足下
公告
阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

【iOS重学】一篇文章讲清楚+load和+initialize

写在前面

+
加载中...

【iOS重学】一篇文章讲清楚+load和+initialize

写在前面

本文主要从底层源码上来分析一下+load+initialize方法的调用顺序以及它们之间的区别。

+load

+load方法会在Runtime加载类、分类的时候调用,每个类、分类的+load方法在程序运行过程中只会调用一次。

@@ -220,7 +220,7 @@

+load和+initialize对比

2、调用方式:

+load是根据函数地址直接调用。

+initialize是通过objc_msgSend调用。

-
文章作者: Sunny
文章链接: https://codersunny.com/posts/8f7262c3/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
-
加载中...

【iOS重学】浅谈iOS的包体积优化(一)

为什么要做包体积优化

+
加载中...

【iOS重学】浅谈iOS的包体积优化(一)

为什么要做包体积优化

随着应用的不断更新迭代,应用安装包的体积会越来越大,用户下载应用消耗流量产生的资费就会进一步增长,会导致用户下载意愿会相对下降。

随着包体积的不断增大,安装应用的时间变长会影响用户的使用感受,对于内存比较小的低端机型来说,应用解压后内存占用更大也会影响用户的使用。

苹果对iOS APP 大小有严格的限制,虽然苹果官方也一直在提高可执行文件的上限,在iOS13 还取消了强制的OTA限制,但是下载大小超过200MB的会默认请求用户下载许可,并且在iOS13以下的设备依然会受到OTA的限制,影响新用户转化和老用户的更新。

@@ -270,7 +270,7 @@

优化总结

是不是项目变大了做包体积优化才有意义?

绝对不是,包体积优化应该是一种习惯而不是等到包体积变得很大了才去思考做优化,应该是只要觉得有优化的空间就去做优化。

如果打出来的ipa包比较小,说明我们的历史负担不严重,俗话说船小好掉头而且编译的速度也快,试错成本也低,恰恰才是该优化的时候,优化总结出来的教训落地到文档形成一种规范,后续开发时也能时刻引起注意,这样对于开发来说是最好的。

-
文章作者: Sunny
文章链接: https://codersunny.com/posts/94e6df10/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Sunny
千里之行,始于足下
公告
阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
最新文章
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论
avatar
Sunny
千里之行,始于足下
公告
阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
最新文章
-
加载中...

【 iOS重学】详细分析isa和superclass

写在前面

+
加载中...

【 iOS重学】详细分析isa和superclass

写在前面

本文将从源码上来详细剖析OC对象的分类、isa、superclass,带大家重新认识iOS。

苹果源码下载:

1.https://opensource.apple.com/releases/ 搜索objc4找到最新资源进行下载

@@ -244,7 +244,7 @@

场景二

  • 通过NSObjectmeta-class对象的superclass指针找到NSObjectclass对象。
  • NSObjectclass对象中找到-fly方法得以调用。
  • -
    文章作者: Sunny
    文章链接: https://codersunny.com/posts/9efafc5a/
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    -
    加载中...

    【Hexo】如何拥有一个自定义域名的Hexo博客

    如何拥有自己的域名

    +
    加载中...

    【Hexo】如何拥有一个自定义域名的Hexo博客

    如何拥有自己的域名

    这篇文章中我们利用Hexo和Github搭建了自己的博客,搭建出来的博客地址格式都是:https://+Github博客仓库名.github.io

    比如我的博客地址就是:https://happycodersunny.github.io

    是不是觉得不好看,大家的网址都长一样,好像是流水线上生产出来的一样,那么怎么替换成自己的域名显得更个性化呢?

    @@ -180,7 +180,7 @@

    修改博客配置文件

    这样我们就把自己购买的域名用上了,也使自己的网站更具个性化一点。

    最后

    嘻嘻嘻,都看到这里了,不要吝啬你的小星星嘛,为博主点个赞呐~

    -
    文章作者: Sunny
    文章链接: https://codersunny.com/posts/9fce234e/
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    avatar
    Sunny
    千里之行,始于足下
    公告
    阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    avatar
    Sunny
    千里之行,始于足下
    公告
    阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
    -
    加载中...

    【iOS重学】浅谈iOS的包体积优化(二)

    LinkMap分析可执行文件

    +
    加载中...

    【iOS重学】浅谈iOS的包体积优化(二)

    LinkMap分析可执行文件

    LinkMap结构分析

    基础信息

    1

    @@ -233,7 +233,7 @@

    迁移__TEXT段具体方案

    使用命令xcrun size -lm 可执行文件路径可以查看可执行文件的Data内容,如下:

    13

    通过上面的截图我们会发现:Data里面会多了我们创建的__TT_TEXT__RODATA两个Segment,原本的__TEXT__DATA的大小也会发生变化,至此,关于__TEXT段具体如何迁移我们就简单的了解到这里了,本文也只是博主的一个学习笔记,如各位看官发现有任何问题请指正 在此感激不尽。

    -
    文章作者: Sunny
    文章链接: https://codersunny.com/posts/a2dbd15f/
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    -
    加载中...

    【iOS重学】关于RunLoop的简单介绍

    写在前面

    +
    加载中...

    【iOS重学】关于RunLoop的简单介绍

    写在前面

    本文主要是记录关于RunLoop的一些简单介绍。

    RunLoop

    基本认识

    @@ -258,7 +258,7 @@

    RunLoop的源码查看

    写在最后

    关于RunLoop的一些基本介绍、各种模式以及它整个完整的运行逻辑就介绍到这里了,如有错误请多多指教。

    -
    文章作者: Sunny
    文章链接: https://codersunny.com/posts/a5190dfd/
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    avatar
    Sunny
    千里之行,始于足下
    公告
    阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
    -
    加载中...

    【iOS重学】启动优化(一)

    APP是如何启动的

    +
    加载中...

    【iOS重学】启动优化(一)

    APP是如何启动的

    APP启动

    热启动:系统里面存在APP的进程缓存信息,比如杀掉APP后短时间内重启APP。

    冷启动:系统里面没有APP的进程缓存信息,例如重启手机打开应用、APP长时间不用系统替换掉已有的进程缓存。

    @@ -259,7 +259,7 @@

    一些检测工具推荐

    最后

    下一篇预告:iOS重学之启动优化(二)- 二进制重排

    -
    文章作者: Sunny
    文章链接: https://codersunny.com/posts/a5b508b2/
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    -
    加载中...

    【iOS重学】Runtime中常用的一些API汇总

    写在前面

    +
    加载中...

    【iOS重学】Runtime中常用的一些API汇总

    写在前面

    本文主要是总结一下在我们日常项目中会用到的一些关于Runtime的相关API,便于以后查阅。

    isMemberOfClass 和 isKindOfClass 区别

    在正式总结Runtime下相关API之前,先看看isMemberOfClassisKindOfClass的区别:

    @@ -189,9 +189,9 @@

    Runtime总结

    -

    写在最后

    +

    写在最后

    关于Runtime中常用的一些常用的API就总结到这里,如有错误请多多指教。

    -
    文章作者: Sunny
    文章链接: https://codersunny.com/posts/b38791c9/
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    -
    加载中...

    【iOS重学】窥探Class的结构

    写在前面

    +
    加载中...

    【iOS重学】窥探Class的结构

    写在前面

    本文主要探究Class的内部结构,博主这里使用的objc4的源码版本是objc4-838,建议大家在看的时候可以下载最新源码。

    Class的结构

    在前面关于isa和superclass文章中,我们提到了类对象和元类对象的类型都是Class,内存里面保存的是:

    @@ -176,9 +176,9 @@

    Class的结构

    用一张图来表示Class结构:

    3

    从上面的结构分析我们可以看到:class对象或meta-class对象里面确实保存了方法列表、属性列表、协议列表、成员变量列表等信息。

    -

    写在最后

    +

    写在最后

    关于Class结构信息我们就分析到这里了,如果有什么不对的地方望指教。

    -
    文章作者: Sunny
    文章链接: https://codersunny.com/posts/b55a18a8/
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    avatar
    Sunny
    千里之行,始于足下
    公告
    阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    avatar
    Sunny
    千里之行,始于足下
    公告
    阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
    -
    加载中...

    【PS学习】色彩基础

    写在前面

    +
    加载中...

    【PS学习】色彩基础

    文章作者: Sunny
    文章链接: https://codersunny.com/posts/b55c64d0/
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    -
    加载中...

    【iOS重学】关联对象的底层原理

    写在前面

    +
    加载中...

    【iOS重学】关联对象的底层原理

    写在前面

    本文主要探究一下iOS中如何给分类添加属性以及关联对象的底层原理是什么,建议大家看本篇文章的时候参考objc4源码一起看会更好。

    如何给分类添加属性

    // Person + Test 类
    @interface Person (Test)

    @property (nonatomic, copy) NSString *name;

    @end

    @implementation Person (Test)

    - (void)setName:(NSString *)name {
    objc_setAssociatedObject(self, @selector(name), name, OBJC_ASSOCIATION_COPY_NONATOMIC);
    }

    - (NSString *)name {
    return objc_getAssociatedObject(self, @selector(name));
    }

    @end
    @@ -204,7 +204,7 @@

    总结

    写在最后

    关于关联对象的底层原理我们就简单分析到这里,如有错误请多多指教。

    -
    文章作者: Sunny
    文章链接: https://codersunny.com/posts/baafbb5e/
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    avatar
    Sunny
    千里之行,始于足下
    公告
    阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    avatar
    Sunny
    千里之行,始于足下
    公告
    阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
    -
    加载中...

    【iOS逆向】最全的SSH通信过程

    写在前面

    +
    加载中...

    【iOS逆向】最全的SSH通信过程

    写在前面

    【iOS逆向】如何让Mac和iPhone建立安全连接文章中我们主要讲了Mac和iPhone如何建立安全连接,让我们在Mac上可以通过命令来控制iPhone,但是其实我们使用相关登录命令到登录到iPhone中间是有一个过程的,我们本篇文章就是来分析一下这个过程是什么样的,这个过程包括:

    • 建立安全连接
    • @@ -184,9 +184,9 @@

      删除客户端保存

      第一种方式:

      cd ~./ssh
      ls -l
      vim known_hosts(找到对应的信息进行删除)
      :wq

      第二种方式:ssh-keygen -R 服务器ip地址

      -

      写在最后

      +

      写在最后

      关于SSH如何建立安全连接和客户端认证的文章就写到这里了,如有错误请多多指教。

      -
    文章作者: Sunny
    文章链接: https://codersunny.com/posts/beccfc53/
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    avatar
    Sunny
    千里之行,始于足下
    公告
    阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    -
    加载中...

    【PS学习】图层相关基本操作

    写在前面

    +
    加载中...

    【PS学习】图层相关基本操作

    写在最后

    关于图层的一些基本操作的笔记记录到这里就结束了,如有错误请多多指教。

    -
    文章作者: Sunny
    文章链接: https://codersunny.com/posts/c0e79a01/
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    avatar
    Sunny
    千里之行,始于足下
    公告
    阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
    -
    加载中...

    【iOS重学】一篇文章讲清楚super

    写在前面

    +
    加载中...

    【iOS重学】一篇文章讲清楚super

    写在前面

    经常在网上看到[super xxx]这种输出什么内容等类似的面试题,本文就主要来详细剖析一下这种[super xxx]super调用的底层原理。

    场景

    博主这里用一个常看到的面试题来引出本文的主题:

    @@ -165,9 +165,9 @@

    场景

    在源码中我们搜索一下objc_super结构体:

    1

    从上面的分析,我们可以看到:[super class]中消息接收者还是self也就是说还是Student,同理[super superclas]打印结果还是Person

    -

    写在最后

    +

    写在最后

    关于super调用本质的原理我们在这片文章就分析清楚了,如有错误请多多指教。

    -
    文章作者: Sunny
    文章链接: https://codersunny.com/posts/d1a1e187/
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    avatar
    Sunny
    千里之行,始于足下
    公告
    阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    avatar
    Sunny
    千里之行,始于足下
    公告
    阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
    -
    加载中...

    【Hexo】Hexo博客备份到Github

    为什么要备份

    +
    加载中...

    【Hexo】Hexo博客备份到Github

    为什么要备份

    这篇文章中我们把HexoGithub结合起来搭建了自己的个人博客,hexo d部署到Github的其实Hexo编译后的文件,这些文件是用来生成网页的,并不包含我们的源文件:

    20220511_01

    它其实上传到Github 的是在我们本地目录里的.deploy_git里面的内容:

    @@ -177,10 +177,10 @@

    如何恢复博客

    npm install hexo-cli
    npm install hexo-deployer-git

    然后再去安装主题相关的插件即可,当然如果你电脑上还没有 Node.js等环境的话可能还需要去安装相关的环境。

    现在我们就基本上可以在另一台电脑上继续我们的博客之旅啦~

    -

    最后

    +

    最后

    到这里,如何备份Hexo博客以及如何恢复Hexo博客就基本结束啦。

    嘻嘻嘻,都看到这里了,不要吝啬你的小星星嘛,为博主点个赞呐~

    -
    文章作者: Sunny
    文章链接: https://codersunny.com/posts/da31eaeb/
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    avatar
    Sunny
    千里之行,始于足下
    公告
    阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    avatar
    Sunny
    千里之行,始于足下
    公告
    阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
    -
    加载中...

    【iOS重学】从LCS到IGListKit框架中的Diff算法(上)

    什么是LCS

    +
    加载中...

    【iOS重学】从LCS到IGListKit框架中的Diff算法(上)

    什么是LCS

    子序列

    假设有两个序列 X, Z

    X=<x1,x2,x3,......xm>X = <x_1,x_2,x_3,......x_m>

    @@ -248,7 +248,7 @@

    最后

    问题我们已经抛出来了,我们如何解决上面的两个问题,在降低时间复杂度的同时对Move操作进行一些优化,下一篇我们将谈到iOS中IGListKit框架中的Diff是如何巧妙解决这两个问题的。

    -

    文章作者: Sunny
    文章链接: https://codersunny.com/posts/da46549b/
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    -
    加载中...

    【iOS重学】Category的底层原理

    写在前面

    +
    加载中...

    【iOS重学】Category的底层原理

    写在前面

    本文博主将从Category的基本使用和底层原理来窥探一下Runtime下的Category 是如何实现的。博主这里参考的苹果源码版本是:objc4_838版本。

    Category的基本使用

    // Person 类
    @interface Person : NSObject

    - (void)run;

    @end

    @implementation Person

    - (void)run {
    NSLog(@"%s",__func__);
    }

    @end

    // Person + Test 分类
    @interface Person (Test)

    - (void)test;

    @end

    @implementation Person (Test)

    - (void)test {
    NSLog(@"%s",__func__);
    }

    @end

    @@ -197,9 +197,9 @@

    模拟场景

    1、如果主类和分类都会有-(void)test方法,会优先调用分类的方法,原因是分类的方法列表在前面,注意这里不是覆盖了原来的方法。

    2、Person两个分类都有-(void)test方法,调用哪个方法是根据编译顺序来决定的,后参与编译的优先级更高,比如上例中调用的是Person+Eat中的test方法。

    -

    写在最后

    +

    写在最后

    啦啦啦,关于Category的底层原理窥探就到这里结束了,如有错误的地方还望各位大佬多多指教。

    -
    文章作者: Sunny
    文章链接: https://codersunny.com/posts/dfd029e5/
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    avatar
    Sunny
    千里之行,始于足下
    公告
    阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
    -
    加载中...

    【Hexo】Butterfly 如何替换jsdelivr提升网站访问速度

    写在前面

    +
    加载中...

    【Hexo】Butterfly 如何替换jsdelivr提升网站访问速度

    写在前面

    大家都知道jsdelivr,而且经常用这个CDN服务,这是一个很快而且免费的CDN服务,但是从去年还是啥时候开始就逐渐出现挂掉,不太好用的情况,前段时间更是大规模的挂掉,对我最直接的影响就是:我这个博客网站打开就是巨慢无比,控制台一堆报错,各种图片无法显示,这对于一个强迫症来说真的不能忍,于是打算换掉Butterfly主题下的jsdelivrCDN服务。

    解决办法

    办法一

    @@ -165,7 +165,7 @@

    办法三

    jsdelivr搭建反向代理服务,比如使用Cloudflare自行去搭建。

    最后

    本文就写到这里了,如有问题,欢迎随时联系博主,博主马上修改。

    -
    文章作者: Sunny
    文章链接: https://codersunny.com/posts/e94df8dd/
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    avatar
    Sunny
    千里之行,始于足下
    公告
    阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    avatar
    Sunny
    千里之行,始于足下
    公告
    阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
    -
    加载中...

    【iOS重学】线程保活

    写在前面

    +
    加载中...

    【iOS重学】线程保活

    写在前面

    本文主要讲一下线程保活是什么、线程保活的意义、如何实现线程保活。

    线程保活

    线程生命周期

    @@ -167,9 +167,9 @@

    如何使用线程保活

    - (void)viewDidLoad {
    [super viewDidLoad];
    // 创建一个线程对象
    self.thread = [[WWPermenantThread alloc] init];
    }

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [self.thread excuteTask:^{
    NSLog(@"执行任务 - %@", [NSThread currentThread]);
    }];
    }

    执行结果:

    2023-02-15 10:18:56.211402+0800 线程保活Demo1[10526:21512893] 执行任务 - <NSThread: 0x600002e99680>{number = 9, name = (null)}
    2023-02-15 10:18:56.830085+0800 线程保活Demo1[10526:21512893] 执行任务 - <NSThread: 0x600002e99680>{number = 9, name = (null)}
    2023-02-15 10:18:57.279150+0800 线程保活Demo1[10526:21512893] 执行任务 - <NSThread: 0x600002e99680>{number = 9, name = (null)}
    2023-02-15 10:18:58.212741+0800 线程保活Demo1[10526:21512893] 执行任务 - <NSThread: 0x600002e99680>{number = 9, name = (null)}
    2023-02-15 10:19:32.672529+0800 线程保活Demo1[10526:21512038] -[OneViewController dealloc]
    2023-02-15 10:19:32.672800+0800 线程保活Demo1[10526:21512038] -[WWPermenantThread dealloc]
    -

    写在最后

    +

    写在最后

    关于如何实现线程保活的笔记就记录到这里了,如有错误请多多指教。

    -
    文章作者: Sunny
    文章链接: https://codersunny.com/posts/f68de671/
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    avatar
    Sunny
    千里之行,始于足下
    公告
    阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    -
    加载中...

    【Hexo】Twikoo评论系统配置教程

    写在前面

    +
    加载中...

    【Hexo】Twikoo评论系统配置教程

    写在前面

    Hexo博客里面支持的评论系统有:DisqusDisqusjsLivereGitalkValineWalineUtterancesFacebook CommentsTwikooGiscus,这里面有的评论有的是国外的服务器、有的有广告,本文要讲的Twikoo是在butterfly3.3之后支持的,它支持邮件提醒、微信提醒等功能,还是非常好用的。

    注意:本文仅针对腾讯云的部署方式中的「手动部署」,其他详细部署方式请参考官方文档

    @@ -208,7 +208,7 @@

    配置butterfly主题文件

    最后

    关于其他的评论系统的配置请参考:butterfly主题官方文档

    关于Twikoo评论系统详细文档请参考:Twikoo官方文档

    -
    文章作者: Sunny
    文章链接: https://codersunny.com/posts/feb84685/
    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sunny's Blog
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    avatar
    Sunny
    千里之行,始于足下
    公告
    阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。
    打赏
    • 微信
      微信
    • 支付宝
      支付宝

    评论
    avatar
    Sunny
    千里之行,始于足下
    公告
    阅读过程中如果遇到问题,请及时评论或者留言,看到了会第一时间回复,如果未收到回复也可加博主vx(申请时请备注)。