sprite 发布的文章

1. tableView下方出现莫名的空白

  1. tableFooterView问题 一般来说,tableview会默认有一个footerview 解决:在视图加载时将这个footerview设为没有高度或者是空view就可以

    tableView.footerView = UIView()
    tableView.footerView.height = 0
  2. contentSize自动计算问题 tableView会有一个自动计算contentSize的功能 即我们改变dataSource里的数据刷新视图的时候,tableview的总高度是被改变的,而这时自动计算出来的,不像scrollview是需要手动指定的。这时如果系统计算的预估值出现误差就会出现空白的问题。 解决: 设置tableView的自动预估值为0

    tableView.estimatedRowHeight = 0

- 阅读剩余部分 -

最近刚更新 macOS 10.15 Catalina,写一个新的ios项目的时候发现,pod突然不能用了。提示找不到文件。 与此同时,打开bash的时候还在提示几行英文。 仔细一看,是推荐换一个命令行的工具,叫zsh。通过复制系统提示可以一键切换过去。

zsh: /usr/local/bin/pod: bad interpreter: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin: no such file or directory

切换完了之后尝试使用pod 依然提示找不到文件。于是在网上搜索。

- 阅读剩余部分 -

在使用SwiftyJSON做数据传输的时候,经常需要从JSON格式中取值到对象中,在开发ios应用时,对象的字段和类型通常也是固定的,如何在接口获取到数据的时候优雅的进行类型转换是一个很值得考虑的细节。

优雅不仅是在可读性上提高,同时也方便后期对于数据格式的管理维护。

否则每次做细节调整的时候,需要查找所用的工作量就不可小觑了。

在网上也有通过反射机制来实现所有类自动转换的,见参考1。逻辑上是成立的,没有仔细研究。实际测试发现无法转换(与语言版本等可能有关)。

这里我先用比较务实的方式,做一层封装。主要完成的是将JSON赋值操作,写入到对象的结构体中,这样的话我们就不用在业务流程中进行复杂的赋值操作了。

1. 设计一个用于支持JSON互转的接口

这里我设计了两种初始化的方式,实际上一种就够了 主要是调用的时候写法略有不同,且便捷初始化开销更小一点。 我个人会喜欢以函数名来区分不同的运作方式,所以额外增加了静态的fromJSON方法

- 阅读剩余部分 -

想要做好iOS的应用开发,深入的理解Cocoa框架是十分重要的。 今天做一下自上而下梳理,这样在开发的时候会更清晰,遇到问题也可以更容易的找到方向。

OS X架构中的Cocoa Cocoa in the architecture of OS X

iOS架构中的Cocoa Cocoa in the architecture of iOS

Cocoa

Mac OS X上五大API之一 Cocoa, Carbon, POSIX, X11, Java

- 阅读剩余部分 -

字符串替换

REPLACE ( fieldname, search, replace )

数据去重

DELETE ...

DELETE FROM table_copy 
WHERE key IN ( 
    SELECT t.key FROM (
    SELECT key FROM table_copy GROUP BY key having count(*) >1
    ) t
) 
AND id NOT IN(
    SELECT t.id FROM (
    SELECT id FROM table_copy GROUP BY key having count(*) >1
    ) t
)

在CentOS下可以通过shell脚本执行定时任务 在macos下 有类似的功能 使用crontab

crontab的格式:

f1 f2 f3 f4 f5 program
# 分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-6) 程序

# 其中如果要执行 每x分钟 则使用 */x
# 如果使用* 表示任意次数

* * * * * curl https://test.com
# 表示每分钟都会使用curl打开 test.com

- 阅读剩余部分 -

说来有点惭愧用了1年多的git至今还没有创建过分支,主要都是把git当成一个线上同步来用。 细想起来是因为我很难集中精力细看git的说明文档,另一方面很多网上的文章说的比较晦涩抽象,很难简明扼要的吸收要点。 但是git这些强大的功能到底作用是什么? 如何和实际工作联系,怎么样简单快速的get到这些功能的意义和使用方式呢? 今天就好好get一下。

git init

“这个文件夹,被我征用了,我要用它来做我的代码版本控制,其他工作就交给git你了。”

初始化仓库 初始化之后,git就会在这里生根发芽。

git clone git@xx.com/sth.git folder

“快帮我建一个和sth一样的仓库,放到folder文件夹就行了。(嗯,仓库我还没建,你看着办)”

- 阅读剩余部分 -

拉取的时候可以通过 sparse clone 实现对指定文件夹的拉取

这样做通常是为了只下载核心的代码,不希望文件过多过于臃肿。

后来发现另一个更重要的,特别是在一个项目刚开始克隆别人的项目时,使用 --depth 参数来设置拉取深度更有效。

需要注意的是,可能和版本有关 也可能git语法就是这样。 --depth 需要写在 add,clone之后 不能写在语句结尾,否则是无效的。

网上对于挂载磁盘方式很多,有命令行的也有一键挂载的sh

这里做一个比较有条理的总结

  1. 查看当前磁盘情况

    fdisk -l
    # 这时会显示系统所支持的硬盘 每个硬盘有一个盘符 如 /dev/vda
  2. 挂载磁盘到对应目录( 相当于为磁盘访问创建一个快捷方式 )

     mount /dev/vda /mydisk
     # 挂载  盘符名称  快捷方式名称
    
     # 如果挂载错误 可以卸载
     umount /dev/vda/ /mydisk

如果过程中需要对盘符进行格式化

mke2fs ext4 /dev/vda
# 格式化  格式 盘符

什么是循环?

循环就是反复的做一件事情,尽管每次都可能一模一样 也有可能略有差别。 无论是打扑克、还是打麻将,其实都是符合循环这个概念。

譬如说,打斗地主的时候我们每次都要不停的从牌堆中抓一张牌,大家分别取一张,直到牌堆里的牌只剩3张。

每一次的抓牌就是循环的一个过程。

那么for循环和while循环的差别是什么呢?

如果用女人可以理解的方式来说的话,那么

for循环是 曾经有一份真诚的爱情放在我的面前....... 我希望是 10000年

while循环是 山无棱、天地合,乃敢与君绝