最近开是做新项目,准备尝试使用ARC,记录遇到的一些问题。
ARC是编译器特性,所以要求Xcode的最低版本为4.2,iOS4以上(注意weak是ios4以上才有的,ios4中只能使用__unsafe_unretained)。
ARC的规则:
不能调用dealloc方法(可以重写,做一些清除操作,例如delegate置空,清除非ARC管理的内存,不能调用[super dealloc],编译器会自动帮你出入该代码),不能调用retain,release,autorelease,retainCount。
CF...
阅读全文
今天在看多线程同步时,突然想到了单例的同步问题。自从dispatch_once出现后,我们创建单例非常简单且安全:
View Code
苹果简洁的接口已经慢慢让我们忘记了创建单例时的同步问题。
普通的创建单例方法:
View Code
这么写是没问题的,但是在多个线程同时调用时效率不高,可以用著名的double check方法来提高效率:
View Code
如果没有第一个if (obj == nil),每一次调用这个方法,都会用锁操作...
阅读全文
要点:
retain使对象的引用计数+1,需要release
在属性中retain,需要在dealloc中release
delegate最好不要retain,以免循环引用
注意:
retain在属性中的用法,调用self.XX时系统默认步骤是先release就对象,再retain新对象
正确的释放方法为使用是不需要释放,直接在dealloc里面释放,即使该属性没有alloc,也应该在dealloc里面释放,以免发生leaks
阅读全文
要点:
self调用自己方法,super调用父类方法
self是类,super是预编译指令
【self class】和【super class】输出是一样的
self和super底层实现原理:
当使用 self 调用方法时,会从当前类的方法列表中开始找,如果没有,就从父类中再找;而当使用 super 时,则从父类的方法列表中开始找,然后调用父类的这个方法。
当使用 self 调用时,会使用 objc_msgSend 函数: id objc_msgSend(id theReceiver...
阅读全文
typeof 和 __typeof,typeof 的区别?
__typeof __() 和 __typeof() 是 C语言 的编译器特定扩展,因为标准 C 不包含这样的运算符。 标准 C 要求编译器用双下划线前缀语言扩展(这也是为什么你不应该为自己的函数,变量等做这些)
typeof() 与前两者完全相同的,只不过去掉了下划线,同时现代的编译器也可以理解。
所以这三个意思是相同的,但没有一个是标准C,不同的编译器会按需选择符合标准的写法。
在标准C...
阅读全文
程序的耗电主要在以下四个方面:
CPU 处理
定位
网络
图像
优化的途径主要体现在以下几个方面:
尽可能降低 CPU、GPU 的功耗。
尽量少用 定时器。
优化 I/O 操作。
不要频繁写入小数据,而是积攒到一定数量再写入
读写大量的数据可以使用 Dispatch_io ,GCD 内部已经做了优化。
数据量比较大时,建议使用数据库
网络方面的优化
减少压缩网络数据 (XML -> JSON -> Prot...
阅读全文
大家都知道互联网大公司一向以技术强悍而知名,BAT的技术在国内互联网公司里算是比较领先的了,这也是因为大公司的业务繁杂庞大,必须要有足够优秀的技术去支撑。
相对而言,小公司更倾向于选用快速扁平化的技术架构,相对来说技术的沉淀就不会像大公司这么多,所以你会发现大公司里和小公司里,大家的技术思考可能也不太一样。
1,大公司里通常牛人很多,相对来说小公司里的牛人相对少一点,当然也有很多从大公司...
阅读全文
存在64张哈希表中,根据哈希算法去查找所在的位置,无需遍历,十分快捷
散列表(引用计数表、weak表)
SideTables 表在 非嵌入式的64位系统中,有 64张 SideTable 表
每一张 SideTable 主要是由三部分组成。自旋锁、引用计数表、弱引用表。
全局的 引用计数 之所以不存在同一张表中,是为了避免资源竞争,解决效率的问题。
引用计数表 中引入了 分离锁的概念,将一张表分拆成多个部分,对他们分别加锁,...
阅读全文
struct和class的区别
类: 引用类型(位于栈上面的指针(引用)和位于堆上的实体对象)
结构:值类型(实例直接位于栈中)
在C++中我们可以看到struct和class的区别并不是很大,两者之间有很大的相似性。那么为什么还要保留struct,这是因为C++是向下兼容的,因此C++中保留了很多C的东西。
一.首先看一下C中struct
1.struct的定义
struct A{int a;int b;//成员列表注意:因为struct是一种数据类型,那么就...
阅读全文
随着移动互联网的高速发展泄洪而来,有意学习移动开发的人越来越多了,竞争也是越来越大,需要学习的东西很多。如何才能在激烈的移动开发者竞争中一枝独秀,成为一名真正合格的高级iOS开发工程师?
话不多说直接上干货
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这是一个我的iOS交流群:638302184,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!
...
阅读全文