小唐朝的技术blog
我的职业笔记,这里展示着我认为适合收藏的代码,以及一些职业上的点滴。有想法就去实现,这样才能成长!
我的Github欢迎访问,如果喜欢请给个star利用SMC保护MacBookPro的电池
电脑才使用9个月不到电池健康就只有88%了,于是就弄了个工具用来限制充电。 因锂电池的特性,最好不要总是保持最满电量,虽然说macOS已经有了优化电池充电,但是它的优化学习时间长,基本上不生效。于是研究[AlDente](https://github.com/davidwernhart/AlDente)发现它利用SMC实现了在笔记本连接电源的情况下限制充电。
给swift的String扩展一些常用方法
swift的字符串操作自从3开始就变的麻烦,文章Swift 3.0 String中列举了一下swift3的String的用法。 3之后String引入了String.Index类型,编辑操作就变得麻烦了,要操作String就必须通过相关的String.Index,不能直接通过Int下标来操作了。 于是就通过extension给String添加方法让其操作也能像数组一样直接用下标操作 ## 首先 将`String`实现`NameSpace`协议,然后通过`string.dvt`访问扩展的功能方法,减少和其它的三方冲突概率。`NameSpace`协议详...
通过swift的协议实现C++的命名空间效果
在开发的过程中,很多时候我们会对系统的或者三方库提供的类结构体枚举进行扩展。不同的开发者习惯不一样,然后也不知道自己所需要的功能是否已经被扩展了。在扩展功能给函数取名字的时候就有可能会出现函数已经存在了,或者是项目中导入的多个库里面都给一个类型扩展了同一个名字的函数。 在`Objective-C`中,给系统的类或者三方库的类进行扩展功能,函数名用`xxx_`做前缀,避免冲突。 在`Swift`中,有更优雅的方式来避免冲突的发生了。那就是利用协议和其默认实现做到类似于`C++`的命名空间效果。 首先定义`BaseWrapper`结构体包装器,该结构体包装器用于包装需要操作...
最新的、较全的 cocoapods 指南
最近一段时间经常遇到iOS开发圈里的的朋友在问cocoapods的问题,cocoapods自从1.8正式推出CDN后在大陆使用问题不断。众所周知的gfw导致在大陆连接境外的服务器丢包率奇高,然后又有中国特色的DNS污染,这就导致了cocoapods的CDN在大陆基本是残废。 然后,不明所以的iOS开发者就到处去找资料,各种折腾,结果很不理想。网络上一大把的cocoapods安装教程,但很多的都是复制粘贴,作者也没有去维护更新。于是跟着网上的教程越是折腾问题越多,停都停不下来。
Xcode Server 持续集成—非开发人员也能打包
这几天项目上的事情不多,公司有频繁打包的需求。刚好分配给我的mini闲置,之前了解过持续集成的工具Jenkins,安装过几次都以失败而告终。突然想起了Server有Xcode支持,最初玩Server的时候以为它仅仅为Xcode提供代码仓库,后面才了解到它是用来做持续集成的。
Socket编程
一直想深入即时通信开发,于是在上次假期的时候就写了一个模型,最初选择的是PHP,原因是我有些PHP基础,但是做到服务器多线程处理客户端发送的消息的时候遇到了大问题:PHP默认版本是不支持多线程的,支持多线程的版本网友们的评论是说只能用来玩玩,而且电脑本地环境搭建PHP-ZTS又比较麻烦,于是就选择使用C++开发。截止记录该笔记,有很多优化思路还没有实现。
面试问题之响应者链
前两天面试遇到响应者链问题。有个需求按钮的frame超出其父视图,需要点击按钮任意区域都响应。如果UIView的子视图超出其frame,其子视图是收不到点击事件消息的。
set/get
在Objective-C中有readonly、readwrite修饰词,那么在Swift里呢?那就就是set/get,在Swift里实现了set/get方法的属性叫做计算属性,顾名思义,它只负责逻辑,没有存储空间。它一般需要和存储属性配合使用。
GCD的笔记
这段时间无业在家,在看iOS多线程相关的东西的时候就稍微研究了一下GCD,GCD由C语言实现,在Objective-C里调用它就是C语言的方法,在Swift则做了一层封装`DispatchObject`。
Objective-C及Swift中的单例
> 单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。 — 维基百科