归类于Cocoa Touch
查看:80 | 2012-05-14
VN:F [1.9.17_1161]
Rating: 0.0/10 (0 votes cast)
本文由易飞扬的博客出品,泰然授权转载,如需转载请联系原版权方。
原文链接:http://www.yifeiyang.net/development-of-the-iphone-simply-7/
通过前面几篇文章的介绍,我想大家应该对ARC有了一个比较完整的理解。最后,我们来对ARC做一个总结,并把一些未涉及到的细节部分再深入讨论一下。
内存管理基本原则
- 内存管理的依循下面的基本原则
- 自己生成的对象,那么既是其持有者
- 不是自己生成的对象,也可成为其持有者(一个对象可以被多个人持有)
- 如果不想持有对象的时候,必须释放其所有权
- 不能释放已不再持有所有权的对象不管ARC有没有效,该原则始终存在。
所有权关键字
从代码上看,有ARC的代码和没有ARC的代码区别就在下面的几个关键字。
类似 NSObject* 的对象类型,或者 id 类型1,当ARC有效的时候,根据具体情况,这些关键字必须要使用2。
- __strong
- __weak
- __unsafe_unretained
- __autoreleasing__strong是默认的修饰符。__weak修饰了一个自动nil的weak引用。__unsafe_unretained声明了一个不会自动nil的weak引用。当变量被释放,那么它就变成了一个野指针了。__autoreleasing 用来修饰一个声明为 (id *) 的函数的参数,当函数返回值时被释放。
接下来,我们结合下面ARC的使用准则,来看看一些使用ARC后的技术细节。
Continue reading “iPhone开发之深入浅出 (7) — ARC总结” »
ARC总结, iPhone开发之深入浅出
归类于Cocoa Touch
查看:53 | 2012-05-14
VN:F [1.9.17_1161]
Rating: 0.0/10 (0 votes cast)
本文由易飞扬的博客出品,泰然授权转载,如需转载请联系原版权方。
原文链接:http://www.yifeiyang.net/development-of-the-iphone-simply-2/
自 Xcode4.2 开始导入ARC机制后,为了支持对象间的转型,Apple又增加了许多转型用的关键字。这一讲我们就来了解其用法,以及产生的理由。
引子
我们先来看一下ARC无效的时候,我们写id类型转void*类型的写法:
id obj = [[NSObject alloc] init];
void *p = obj;
反过来,当把void*对象变回id类型时,只是简单地如下来写,
id obj = p;
[obj release];
但是上面的代码在ARC有效时,就有了下面的错误:
error: implicit conversion of an Objective-C pointer
to ’void *’ is disallowed with ARC
void *p = obj;
^
error: implicit conversion of a non-Objective-C pointer
type ’void *’ to ’id’ is disallowed with ARC
id o = p;
^
Continue reading “iPhone开发之深入浅出 (6) — ARC之对象转型” »
ARC之对象转型, iPhone开发之深入浅出
归类于Cocoa Touch
查看:51 | 2012-05-14
VN:F [1.9.17_1161]
Rating: 0.0/10 (0 votes cast)
本文由易飞扬的博客出品,泰然授权转载,如需转载请联系原版权方。
原文链接:http://www.yifeiyang.net/development-of-the-iphone-simply-5/
使用weak property声明Outlet
当我们使用 Interface Builder 生成Outlet对象的时候,一般都是作为 subview 来使用的。比如 UIViewController 的view。所以说Outlet的持有者就是superview对象,即有“父子”关系。由上一回 iPhone开发之深入浅出 (4) — ARC之循环参照 我们知道,当对象间有“父子”关系时,需要使用弱参照,以避免“循环参照”。
ViewController 本身是不会作为Outlet的所有者的,所以使用weak property声明。
ARC之Outlet与弱引用, iPhone开发之深入浅出
归类于Cocoa Touch
查看:59 | 2012-05-14
VN:F [1.9.17_1161]
Rating: 0.0/10 (0 votes cast)
本文由易飞扬的博客出品,泰然授权转载,如需转载请联系原版权方。
原文链接:http://www.yifeiyang.net/development-of-the-iphone-simply-4/
概念
当我们使用强参照(Strong reference)时,往往需要留意 循环参照 的问题。循环参照指的是两个对象被互相强参照,以至于任一对象都不能释放。
一般情况下,当对象之间有“父子关系”时,强参照的情况发生的比较多。比如通讯薄对象AddrBook和每个通讯录Entry的关系如下。
ARC之循环参照, iPhone开发之深入浅出
归类于Cocoa Touch
查看:78 | 2012-05-14
VN:F [1.9.17_1161]
Rating: 0.0/10 (0 votes cast)
本文由易飞扬的博客出品,泰然授权转载,如需转载请联系原版权方。
原文链接:http://www.yifeiyang.net/development-of-the-iphone-simply-3/
前两节我们对 ARC(Automatic Reference Counting) 有了一个基本的理解,但是 ARC 是怎么产生的,为什么苹果要在其最新的 iOS/Mac OS X 上导入该框架? 如果不理解其背后的基本原理,只是死记硬背那些规则/方法,是毫无意义的。就像我们从小接受的填鸭式教育,基本上到后来都还给老师了。
本节,我们先来看看 ARC 产生之前的 Objective-C 内存管理世界,然后再来看看导入 ARC 后,新的 LLVM 编译器在背后为我们做了什么。
Objective-C 内存管理
和许多面向对象语言一样,Objective-C 中内存管理的方式其实就是指 引用计数 (Reference Counting)的使用准则。如下图所示,对象生成的时候必定被某个持有者拿着,如果有多个持有者的话,其引用计数就会递增;相反失去一个持有者那么引用计数即会递减,直到失去所有的持有者,才真正地从内测中释放自己。
ARC之前世今生, iPhone开发之深入浅出
归类于Cocoa Touch
查看:82 | 2012-05-14
VN:F [1.9.17_1161]
Rating: 0.0/10 (0 votes cast)
本文由易飞扬的博客出品,泰然授权转载,如需转载请联系原版权方。
原文链接:http://www.yifeiyang.net/development-of-the-iphone-simply-2/
上一回我们学到了一些ARC的基本概念,这一次我们来看看ARC对@property的使用规则有何影响。
所有者属性
我们先来看看与所有权有关系的属性,关键字间的对应关系。
| 属性值 |
关键字 |
所有权 |
| strong |
__strong |
有 |
| weak |
__weak |
无 |
| unsafe_unretained |
__unsafe_unretained |
无 |
| copy |
__strong |
有 |
| assign |
__unsafe_unretained |
无 |
| retain |
__strong |
有 |
- strong
- 该属性值对应 __strong 关键字,即该属性所声明的变量将成为对象的持有者。
- weak
- 该属性对应 __weak 关键字,与 __weak 定义的变量一致,该属性所声明的变量将没有对象的所有权,并且当对象被破弃之后,对象将被自动赋值nil。并且,delegate 和 Outlet 应该用 weak 属性来声明。同时,如上一回介绍的 iOS 5 之前的版本是没有 __weak 关键字的,所以 weak 属性是不能使用的。这种情况我们使用 unsafe_unretained。
- unsafe_unretained
- 等效于__unsafe_unretaind关键字声明的变量;像上面说明的,iOS 5之前的系统用该属性代替 weak 来使用。
- copy
- 与 strong 的区别是声明变量是拷贝对象的持有者。
- assign
- 一般Scalar Varible用该属性声明,比如,int, BOOL。
- retain
- 该属性与 strong 一致;只是可读性更强一些。
- Continue reading “iPhone开发之深入浅出 (2) — ARC之@property使用” »
ARC之@property使用, iPhone开发之深入浅出
归类于Cocoa Touch
查看:161 | 2012-05-14
VN:F [1.9.17_1161]
Rating: 0.0/10 (0 votes cast)
开篇:早就和易飞扬说过要转载他的这个出色的系列教程,感谢易飞扬的辛勤劳动,以及很多博客主对这个行业的贡献。(by Iven)
原文链接:http://www.yifeiyang.net/development-of-the-iphone-simply-1/
ARC是什么
ARC是iOS 5推出的新功能,全称叫 ARC(Automatic Reference Counting)。简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了。
该机能在 iOS 5/ Mac OS X 10.7 开始导入,利用 Xcode4.2 可以使用该机能。简单地理解ARC,就是通过指定的语法,让编译器(LLVM 3.0)在编译代码时,自动生成实例的引用计数管理部分代码。有一点,ARC并不是GC,它只是一种代码静态分析(Static Analyzer)工具。
Continue reading “iPhone开发之深入浅出 (1) — ARC是什么” »
ARC是什么, iPhone开发之深入浅出
归类于Cocoa Touch
查看:317 | 2012-05-07
VN:F [1.9.17_1161]
Rating: 9.0/10 (4 votes cast)
泰然教程组出品,转载请保留出处并通知泰然!翻译:大侠自来也;校对:Iven
原文地址:http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-2
欢迎回到当程序崩溃的时候怎么办 教程!
在这个教程的第一部分,我们介绍了SIGABRT和EXC_BAD_ACCESS错误,并且举例说明了一些使用xcode调试器(Xcode debugger)和异常断点(Exception Breakpoints)解决问题的策略。
但是我们的app仍然有一些问题!就像我们看到的,他工作的并不是很好,并且这里仍然有许多潜在的可能崩溃的问题。
幸运的是,在这个教程的第二部分,也是最后一部分,我们可以学习更多的技术来处理这些问题。
所以我们就不在啰嗦了,让我们回到继续修正这个充满bug的app中吧!

Continue reading “当程序崩溃的时候怎么办 Part-2” »
程序崩溃