文档详情

《从零开始学iOS7开发系列3-我的地盘我做主-Cha20》.pdf

发布:2015-10-09约9.37千字共11页下载文档
文本预览下载声明
从零开始学iOS7开发系列3-我的地盘我做主-Cha20 说明: 本系列⽂章的原⽂及⽰例代码来⾃raywenderlich store中的iOS Apprentice 系列3教程,经过翻译 和改编。 版权归原作者所有,本系列教程仅供学习参考使⽤,感兴趣的朋友建议购买原英⽂教程教程(The iOS Apprentice Second Edition: Learn iPhone and iPad Programming via Tutorials!)。 购买链接: /store 欢迎继续我们的学习。 ⾸先让我们来点理论知识充电吧。 Object graph(对象图) 对象可不像修⼠,在深⼭之中云深不知处。我们的应⽤中有很多对象,它们需要在⼀起共同⼯作。 对象之间的关系被称为object graph (对象图)。 ⽐如在这款应⽤中,CurrentLocationViewController就和⼏个对象之间有⼀定的关联: 这些对象是它所拥有的实例变量和属性,或者换句话说是它所“拥有”的对象。但这只是个开始, CurrentLocationViewController本⾝被其它对象所拥有,⽐如它属于UITabBarController,⽽ UITabBarController则属于UIWindow。 当然,到了这⾥,我们也仅仅看到了当前应⽤的对象图的⼀⼩部分。对象图显⽰了不同对象之间 的所属关系。(不要把对象图和类层级图弄混了。类层级图显⽰的是对象的数据类型,⽽不是对 象本⾝)。 对象的ownership (所属关系)在iOS开发中是⾮常重要的概念。我们需要建⽴⼀个清晰的图景, 了解对象之间的所属关系,因为这些对象的⽣死存亡就取决于这⼀点!如果⼀个对象没有任何的 owner (不被任何⼈需要的穷DS),那么它就会被⽴即deallocate (销毁!)。如果应⽤中还要 ⽤到这个对象,就会带来毁灭性的打击(crash!)。反过来也⼀样,如果某个对象有太多的 owner(⼈⼈都想追的⽩富美),那么这个对象就会⼀直驻留在内存之中,这样就可能导致应⽤内 存空间不⾜,直到崩溃。 每个对象都可能有超过⼀个owner。例如,当⽤户触碰Tag Location按钮时, CurrentLocationViewController会传递⼀个CLPlacemark对象给LocationDetailsViewController , 那么视图控制器就会分享它的所有权。 我们在LocationDetailsViewController.h中使⽤以下语句对此进⾏了声明: @property(nonatomic,strong) CLPlacemark *placemark; 通过上⾯的语句,LocationDetailsViewController就获得了⼀个新属性placemark ,同时是⼀种 strong关系。当我们把⼀个对象放到该属性变量时,Tag Location界⾯就成了该对象的共同拥有 者。 对象关系的类型有两种:strong和weak 。在strong强关系中,⼀个对象拥有另外⼀个对象的所有 权,同时还可以和其它所有者分享。在weak弱关系中,不存在此类的ownership (所属关系)。 之前我们在outlet类型的属性变量中曾经使⽤过weak属性: @property(nonatomic,weak) IBOutlet UILabel *latitudeLabel; 之所以outlet类型的属性属于weak ,是因为视图控制器并⾮真的是它们的所有者,真实的情况 是,outlet属性变量属于视图控制器的主视图。 weak弱类型在delegate 中也经常⽤到: @property (nonatomic, weak) id IconPickerViewControllerDelegate delegate; 上⾯的这⾏语句来⾃系列1教程中的IconPickerViewController类。图标选择器有⼀个代理对象, 它的作⽤是监听在图标选择界⾯上可能发⽣的事件。 通常情况下⼀个对象不要拥有⾃⼰的代理,因为这样会导致ownership cycle (所属关系
显示全部
相似文档