亚庆的 Blog

NSLog(@"About life, about knowledge, about happiness!");

NSHashTable & NSMapTable

| Comments

在ios开发中大家用到更多的集合类可能是像NSSet或者NSDictionary,NSArray这样的。这里要介绍的是更少人使用的两个类,一个是NSMapTable,另一个是NSHashTable。

小心NSAssert

| Comments

今天在看Facebook的KVOController源码的时候,里面除了使用 NSAssert以外 还使用了 NSCAssert这个更少人用的。 就想起了之前遇到的一个由它引发的问题,顺便记录回忆下。

Ios 中内存释放顺序

| Comments

今天的工作中遇到一个bug(非ARC),就是访问了一个被释放的对象。我找了好久查看是否被意外release之类的原因,都没有找到结果。后来我突然想到了一个点,是否是对象释放的顺序造成的。

我的程序中大概是这样的,viewcontroller的view中添加了一个tableview,然后tableview包含了一些subview。

我猜测是因为tableview持有那些subview的引用计数,那么如果我先释放tableview的话,tableview对subview的引用也就随之消失,那么就可能导致subview被提前释放,但是这个时候原本指向subview的那些指针并没有被置为nil,还是指向原来的地址,那么这个时候再进行release就会crash。

后来为了证明我得猜测,我修改了release的顺序,这个时候就没有再crash了。

另外[super dealloc]一定要写在最后,有点晚了,原因自己google吧,哈哈~~

20140317

| Comments

ios随笔

最近的项目没有使用ARC,周末闲下来用检测了一下memory leak,发现有好些粗心犯的错误。

简单的回一下,ios中以 + alloc/new/copy/mutableCopy开头的方法返回的对象将被调用者持有, 意味着你需要对他进行release。

另外,比如[NSArray array]等类似的方法返回的对象是一个autorelease的,有可能你的程序不会crash,但是你需要retain这个对象,以保证它不会被清除掉了。

最近比较忙,抽空看了一下ReactiveCocoa,这是一个函数式编程的framework,让你以一种与以往不同的方式书写代码,这里有很好的入门文章,传送门在此

[译]NSNotificationCenter With Block Considered Harmful

| Comments

本文是这篇原文的翻译,初次翻译,水平有限,望指正,同时也请尊重本人的劳动成果,转载请注明出处。

(注:有些地方翻译的感觉不好,贴上了原文。)

在过去,我们想要注册接受一个notification通常使用如下的方法:

-[NSNotificationCenter  addObserver:selector:name:object:]

换句话说,就是target-action模式。当收到notification的时候,就会调用相应的selector。

Mach-O Excutables

| Comments

当我们使用xcode开发程序的时候,源文件(.h .m)会被编译成可执行文件。那么这一切到底是怎样发生的呢?下面来简单说明。

GCD(Grand Central Dispatch)

| Comments

什么是GCD

Grand Central Dispatch是异步执行任务的技术之一。开发者只需要定义想执行的任务追加到Dispatch Queue中,GCD就能生成必要的线程并计划执行任务。由于线程管理是作为系统的一部分来实现的,因此可统一管理,也可执行任务,这样就比以前的线程更有效率。