小唐朝的技术blog

小唐朝的技术blog

我的职业笔记,这里展示着我认为适合收藏的代码,以及一些职业上的点滴。

有想法就去实现,这样才能成长!

我的Github

欢迎访问,如果喜欢请给个star

细说USB

​ 通用串行总线(英语:Universal Serial Bus,缩写:USB)是连接电脑与设备的一种序列总线标准,也是一种输入输出(I/O) 连接端口的技术规范,广泛应用于个人电脑和移动设备等信息通信产品,并扩展至摄影器材、数字电视(机顶盒)、游戏机等其它相关领域。 ​ USB最初是由英特尔与微软倡导发起,最大的特点是尽可能地实现热插拔和即插即用。当设备插入时,主机枚举到此设备并加载所需的驱动程序,因此其在使用上远比PCI和ISA等总线方便。 ​ USB Type-C,又称USB-C,也称Type-C。USB-C规范是USB开发者论坛(USB-IF)发布的,在2014年8月完成...

利用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`。