ghostlord's blog.

记录心得


  • 首页

  • 归档

博客的排期

发表于 2018-02-28 |

更新日期

2018-06-25 20:35

已完成排期 博客内容 优先级 预估日期
已完成 OC实现弱引用容器 ⭐️⭐️⭐️ 2018-03
已完成 iOS中多代理的实现 ⭐️⭐️⭐️ 2018-03

排期列表

编写状态 博客内容 优先级 大约完成期限
未开始 iOS中的加密方式比较 ⭐⭐ 2018-7月
延期 对于iOS多线程的理解 ⭐️ –

本想写一篇关于iOS多线程的文章,但是过了一段时间后发现自己对多线程的理解并不到位,
所以现在就不误人子弟了,先延期处理,等什么时候有自信了再来写。

这段时间有些忙,对于后面的文章安排还没有太多想法,所以等有了想法再更新排期。

优先级说明

级别 说明
⭐️⭐️⭐️ 最优先,有时间就会写
⭐️⭐️ 一般,会先完成三星优先级的编写
⭐️ 最低级别,其他的全写完才会写,也有可能被放弃

objc_msgSend() 函数正确的使用方法

发表于 2018-06-25 |

前天发了一个版本,从bugly监控发现频繁崩溃,崩溃类型是:SIGSEGV,由于忘记留’dSYM’文件,导致崩溃信息里面得到的信息很少(血的教训,发版一定要留’dSYM’文件!!),后来只能重新打了一个包,重现崩溃才找到bug,竟然是objc_msgSend()用错了,而且在这之前一直这么错着用!!!

objc_msgSend() 是OC runtime里面很重要的一个函数,用来发送消息,可以解决performSelector:方法最多只能传递两个参数的问题,所以runtime刚入门的人就喜欢用这个函数,但是没有真正理解其用法,比如我。

函数背后的原理和更深入的东西我就不说了,毕竟我也不会,只把函数的用法规则重新学习一下:

1
2
3
4
// 正常方法:
- (void)testMethod;
// 使用objc_msgSend()
objc_msgSend(self , @selector(testMethod));

但是以上写法是错误的,因为以上写法没有定义函数原型
正确的是以下写法:

1
((void(*) (id,SEL))objc_msgSend)(self, @selector(testMethod));

函数原型分解

阅读全文 »

Xcode 10 打开工程提示"Info.plist文件"错误的解决方法

发表于 2018-06-25 |

因为要查找iOS12 崩溃问题,所以装了个Xcode10 beta2,但是打开工程后报类似以下的编译错误:

1
2
3
4
Showing Recent Messages
:-1: Multiple commands produce '/Users/xxx/Library/Developer/Xcode/DerivedData/xx/xx/xx.app/Info.plist':
1) Target 'xxx' has copy command from '/Users/xxx/Desktop/xxxx/Supporting Files/Info.plist' to '/Users/xxx/Library/Developer/Xcode/DerivedData/xxx/xx/xx.app/Info.plist'
2) Target 'xxx' has process command with input '/Users/xxx/Desktop/xxx/Supporting Files/Info.plist'

百度了以下,发现出现这样问题的情况还挺多,但是都没有给出准确的解决办法
经过摸索,我找到一个解决办法:

进入’Build Phases’ -> ‘Copy Bundle Resources’ ,然后找到’Info.plist’并删掉

OC中的弱引用容器

发表于 2018-06-06 |

PS: 本来打算三月就完成这两篇博客,但是因为换工作比较忙,一直到现在才有时间更新。

背景

OC 中常见的容器都是强引用的,比如NSArray,NSDictary,NSSet等,但是我们偶尔也需要一个弱引用的容器。
目前我了解到的比较成熟并且容易实现的方法有两个:

阅读全文 »

OC 中多代理的实现

发表于 2018-06-06 |

背景

iOS 中有个设计模式叫单例模式,还有个模式叫代理模式,
如果想在单例中添加代理就不能像之前那样直接赋值,
那样只有最后一个代理生效,所以就有了多代理的需求

实现方式

多代理实现的关键就在于如何管理多个代理,代理也是对象,我们可以用数组装载起来,但是直接放在数组会影响代理对象的销毁。
所以这就需要一个弱引用的容器,将多个代理加入到弱引用容器中,在需要通知代理的地方遍历容器,分别去通知各代理。
(关于弱引用容器可以参考我的上篇文章OC中的弱引用容器)

阅读全文 »

对NSValue的探索

发表于 2018-02-14 |

开发过程中我有把结构体或者基本数据类型加入数组或字典的需求,比如CGSize,CGRect,CGPoint等数据,但是大家都知道OC的容器中只能加入对象类型的数据。
一般有两个解决办法,第一种办法是转成 NSString ,用时再从NSString转成需要的数据类型,但是这种方式有两个缺点:

  1. 不支持自定义类型的结构体
  2. 性能太差!不,非常差!!

综上,如果没有必要我还是比较倾向于用NSValue,除此以外,使用NSValue还可以满足一些奇葩的需求,比如想加入容器中,但是不增加引用计数。
说起来NSValue,大家用的可能不多,但是NSNumber肯定很常用,其实NSNumber是NSValue的子类,在这就不详细介绍NSNumber了,下面说一下NSValue.

阅读全文 »

本博客评论系统和统计功能现已添加

发表于 2018-02-11 |

开通评论和统计功能


评论系统

  • 1.评论系统采用的是disqus,有可能会被墙掉
  • 2.关于翻墙这件事真的很无奈,最终入了个lantern专业版,虽然在家的网也会有连接失败的情况,但是网速好多了
  • 3.蓝灯邀请码:YM3T6HU

统计系统

  • 1.统计系统采用的是不蒜子的,免费简单
  • 2.吐槽一下腾讯统计和百度统计,官网烂的不能用,直接放弃
  • 3.免费的统计,所以有时候统计不准确,数据请求比较慢

总结

  • 1.终于算有个博客的样子了,坚持维护下去

Mac下运行.sh脚本

发表于 2018-01-12 |

有时下载来的三方框架中会有.sh脚本,一般用来下载文件或者编译源码,所以:

如何运行.sh脚本

  • 1.直接拖到终端
  • 2.从终端中(cd)进入到脚本所在的路径,在终端中直接运行
1
2
# 假如在libs文件夹下,脚本名称为:test.sh
$ libs ./test.sh

出现’permission denied: ./test.sh’的解决办法

1
2
# 这种错误是因为权限问题,重新设置一下权限就可以运行
$ libs chmod 777 test.sh

git常用命令(20180428更新)

发表于 2017-11-22 |

更新信息:


20180428:

1
1.添加tag操作命令

20180224:

1
1.增加创建远程分支命令(2.7)

20180116:

1
2
1.添加Mac 终端的基础操作命令
2.修改排版

20171211:

1
1.添加撤销文件在工作区的修改命令(命令 2.15)

20171205:

1
1.添加版本操作命令分区

20171123:

1
2
1.添加几个新的分支操作命令
2.修改错误的一个分支操作命令

20171122:

1
1.第一次发表

阅读全文 »

Mac 终端窗口美化

发表于 2016-10-03 |

/声明:此博文非原创,来源于网络搜集,作者已无法考证,故未列出出处/

美化前效果图:

885A6415-6907-43E6-B197-08E00F082695.png

开始美化:

1.通过终端偏好设置,选择配色和字体

1
配色方案是“Homebrew”,字体用的是“Menlo Regular 18 pt”

F19F385B-E7EF-49EA-B858-9C2728E4C084.png

阅读全文 »
12

ghostlord

这个博客建立了好几次,可是都没稳定下来,希望这次能一直写下去。

13 日志
39 标签
GitHub E-Mail
© 2018 ghostlord
由 Hexo 强力驱动
|
主题 — NexT.Pisces v6.0.4