文件名称:iOS ARC 完全指南
文件大小:1.19MB
文件格式:ZIP
更新时间:2023-10-12 03:17:02
iOS ARC ios arc
iOS ARC 完全指南OS5ARC完全指南 GuanGyi Inc http://www.gungyi.com ARC完全指南 最显著的变化就是增加了 动引用计数)。是新 编译器的特性,完全消除了手动内 存管理的烦琐。在你的项目中使用是非常简单的,所有的编程都 和以前一样,除了你不再调用 。启用 之后,编译器会自动在适当的地方插入适当的 语句。你不再需要担心内存管理,因为编译器为你处理了 一切。注意是编译器特性,而不是运行时特性(除 指 针系统),它也不是其它语言中的垃圾收集器。因此和手动内存 管理性能是一样的,冇些时候还能更加快速,因为编译器还可以执行某 些优化。 指针保持对象的生命 的规则非常简单:只要还有一个变量指向对象,对象就会保持 在内存中。当指针指向新值,或者指针不再存在时,相关联的对象就会 自动释放。这条规则对于实例变量 属性、木地变量都是适 用的 我们可以按所有权( )来考虑对象: NSString firstnAme self textField text 变量成为 对象的指针,也就是拥有者,该对象 保存了文木输入框的內容 第3页/共49页 OS5ARC完全指南 GuanGyi Inc http://www.gungyi.com @"Ray firstName 个对象可以有多个拥有者,在上面例子屮, 的属 性同样也是这个 对象的拥有者,也就是有两个指针指向同一个对 象 @"Ray firstName self textField text 随后用户改变了输入框的文本,此时属性就指向了新的 对象。但原米的 对象仍然还有一个所有者( 变量), 因此会继续保留在内存中。 第4页/共49页 OS5ARC完全指南 GuanGyi Inc http://www.gungyi.com @" Ray @"Rayman firstName self textField text 只有当 获得新值,或者超出作用域(本地变量方法返回 时、实例变量对象释放时), 对象不再拥有任何所有者, 计数降为,这时对象会被释放。 @"Rayman firstName self, textField text 我们称 和 指针为 ,因为它们能够保 持对象的生命。默认所有实例变量和本地变量都是 类型的指针 另外还有一种 指针, 变量仍然指向一个对象,但不是对 象的拥有者: weak NSString *weakName= selftextFieldtext 第5页/共49页 OS5ARC完全指南 GuanGyi Inc http://www.gungyi.com @"Rayman seLf。 textField text wakaMe 变量和 属性都指向一个 对象,但 不是拥有者。如果文本框的内容发生变化,则原先的 对象就没有拥有者,会被释放,此时 会自动变成,称为 a Mister Dark @"Rman self textField text wakaMe 变量自动变为是非常方便的,这样阻止了指针继续 指向已释放对象。摇摆指针和 会导致非常难于寻找的 消除了类似的问题。 第6页/共49页 OS5ARC完全指南 GuanGyi Inc http://www.gungyi.com 指针主要用于父子关系,父亲拥有一个儿子的 指针, 因此是儿子的所有者;但为了阻止所有权回环,儿子需要使用指 针指向父亲。典型例了是 模式,你的 通过 指针拥有一个 的 和 都是 指针,指向你的 seaview View Controlle「- asOurce UITableview delegat 注意下面代码是有问题的: weak NSString *str= [[NSString alloc] initwithFormat:.]: NSLog(@%@, str);// will output "(null)" 对象没有拥有者(指针),在创建之后就公被立即释放 会给出警告( 变量默认就是 类型的,因此一般我们对于 变量不加 修饰,以下两者是等价的 NSString firstnAme self textField text strong NSString *firstName self textField text 第7页/共49页 OS5ARC完全指南 GuanGyi Inc http://www.gungyi.com 属性可以是 写法如下 @property (nonatomic, strong ) NSString *firstName @property (nonatomic, weak) id <My Delegate>delegate; 有 ,我们的代码可以清晰很多,你不再需要考虑什么时候 或 对象。唯一需要考虑的是对象之间的关联,也就是哪 个对象拥有哪个对象? 以下代码在之前是不可能的,在手动内存管理中,从 中 移除一个对象会使对象不可用,对象不属于时会立即被释放。随 后 打印该对象就会导致应用崩溃。 id ob]= [array objectAtIndex: 0]; [array removeObjectAtIndex: 0]; SLOg(@"地@",obj); 在中这段代码是完全合法的,因为变量是一个 指钅 它成为了对象的拥有者,从 中移除该对象也不会导致对象被释放 也有一些限制。首先能工作于 对象,如果 应用使用了 此时需要你来管理内 存。此外还有其它一些更为严格的语言规则,以确保能够正 常地工作。不过总的来说,无疑利大于弊! 星然管理了 和 但并不表示你完全不需要处理 内存管理的问题。因为 指针会保持对象的生命,某些情况下你 仍然需要手动设置这些指针为,否则可能导致应用内存不足。无论 第8页/共49页 OS5ARC完全指南 GuanGyi Inc http://www.gungyi.com 何时你创建一个新对象时,都需要考虑谁拥有该对象,以及这个对象需 要存活多久 亳无疑问,是 的未来! 鼓励开发者将手动内 存管理迁移至,同时新项目也推荐使用 可以产生更简洁 的代码,和更健壮的应用。有」,内存相关的崩溃已经成为过去! 不过现在正处于手动内存向自动内存管理的过渡期,你仍然会经常 退到与尚不兼容的代码(你自己的代码或第三方库)。幸运的是, 你可以在同一个项目中组合使用和非代码,同时 还提 供白动迁移工具 还能很好地结合使用,这对游戏开发是非常有帮助的。对 有一点点限制( ),但也没太大关 系 Xcode的ARC自动迁移 要启用一个项目的,你有以下几种选择 1. Xcode带了一个自动转换工具,可以迁移源代码至ARC 你可以手动转换源文件 3.你可以在 Xcode中禁用某些文件使用ARC,这点对于第三方库非常有用。 Xcode的自动迁移工具 ARC是LLⅧM3.0编译器的特性,而现有工程可能使用老的GCC4.2或 LLVM-GCC 编译器,因此首先需要设置使用LLWM3.0编详器 第9页/共49页 OS5ARC完全指南 GuanGyi Inc http://www.gungyi.com Project Settings-〉 target-〉 Build settings,在搜索框中输入 compiler, 就可以列出编译器选项设置: 4 ARtist PROJECT ummary Info Build Settings Build paases Build rules Art sts Basic all(combincd levels Default compiler Apple LlvM compiler 3.0) TARGETS Setting :A. sts Y Build Options TLLVM GCC 4.2-Warnings ectlve-C LVM.2 piler A Other Warning Flags Duer 另外最好也选上 Warnings中的 Other Warning Flags为-Wall,这样编译 器就会检查所有可能的警告,有助于我们避免潜在的问题 同样, Build Options下面的 Run Static Analyzer选项也最好启用,这样 每次 Xcode编译项目吋,都会运行静态代码分析工具来检查我们的代码 Artists PROJECT Summary Info Build Settings Build Phases Build rules Art sts Basic (AlD(Cornbined Levels az static analyzer Setting h,Ais青s TARGETS Art sts Run Static Analyze Yes T Build settings下面,选择“A1”,搜索框输入" automatlc",可以没置 0 bjective-C Automatic Reference Counting"选项为Yes,不过Ⅹcode自动转 换工具会自动设置这个选项,这里只是告诉你如何手动设置而已。 Xcode的ARC自动转换工具:Edit\ Refactor\ Convert to0 bjective-CARC 第10页/共49页
【文件预览】:
zkdemon-4213790-iOS 5 ARC完全指南_1600651816
----zkdemon-4213790-iOS 5 ARC完全指南.pdf(1.27MB)