Swift和OC有什么区别?
Swift和Objective-C是两种不同的编程语言,用于开发应用程序和软件。它们有以下几个主要区别:
在程序开发中, 我们经常会遇到 浅拷贝 深拷贝 的问题, 针对堆中的数据, 我们会有栈上的指针指向对象所在的地址, 当我们需要对堆上的对象进行拷贝时, 有两个选择
但是在 iOS 开发中, 也会经常遇到深浅拷贝问题, 比如我有一个对象, 想复制一份, 如果直接使用指针, 其实是浅拷贝, 只是指向同一个内存位置, 同时该对象的引用计数会 +1
SQLite3
中可以使用 BEGIN TRANSACTION
和 COMMIT TRANSACTION
来开始和结束一个事务, 使用 ROLLBACK
来回滚未被提交(COMMIT
)的事务. 如果没有添加这些事务语句, SQLite3
会为每条SQL语句加上一个事务. 要想优化SQLite3
的性能, 那么必须要了解SQLite3
中一次事务执行过程.
今天遇到了一个 UILabel 的 textColor 自动跟肤的问题, 复现路径是
由于业务比较复杂, 我直接用符号断点去看哪个业务做的这个颜色的修改, 诡异的是在 Xcode 打符号断点 -[UILabel setTextColor:]
居然捕获不到这次变色, 说明并不是业务层代码主动去改的颜色.
对于移动开发者来说,最大的尴尬莫过于用户反馈程序出现问题,但因为不能重现且没有日志无法定位具体原因。这样看来客户端日志颇有点”养兵千日,用兵一时”的感觉,只有当出现问题且不容易重现时才能体现它的重要作用。为了保证关键时刻有日志可用,就需要保证程序整个生命周期内都要打日志,所以日志方案的选择至关重要。
Aspect 与 消息转发
Aspects是iOS面向切面编程的第三方库, 它可以在不改变原有代码的情况下, 在任意函数之前或之后插入代码, Aspects 的实现是基于 Runtime 的消息转发机制.
[转载] JSPatch-实现原理详解
JSPatch 是一个 iOS 动态更新框架,只需在项目中引入极小的引擎,就可以使用 JavaScript 调用任何 Objective-C 原生接口,获得脚本语言的优势:为项目动态添加模块,或替换项目原生代码动态修复 bug。
之前在博客上写过两篇 JSPatch 原理解析文章(1 2),但随着 JSPatch 的改进,有些内容已经跟最新代码对不上,这里重新整理成一篇完整的文章,对原来的两篇做整合和修改,详细阐述 JSPatch 的实现原理和一些细节,以帮助使用者更好地了解和使用 JSPatch。