我是新iphone的发展。 我使用ARC为我的项目。 据我了解使用ARC我们不必手动释放任何对象。 不过,我在一些地方已经观察到,人甚至明确地使用ARC后成立自己的对象在ViewDidUnload为零。
例如,在.h文件中我有这样的事情:
@property (unsafe_unretained, nonatomic) IBOutlet MKMapView *mapViewOutlet;
@property (unsafe_unretained, nonatomic) IBOutlet UIToolbar *toolBar;
@property (strong,nonatomic) NSMutableArray *dataArray;
而.M如下:
- (void)viewDidUnload
{
[self setMapViewOutlet:nil];
[self setToolBar:nil];
[super viewDidUnload];
self.dataArray=nil;
}
我的问题是,是不是真的有必要在ViewDidUnload即使在ARC明确指定为零?
在整点viewDidUnload
方法是释放你并不真正需要的数据,以释放内存。 阅读文档 :
当低存储条件发生并且不需要当前视图控制器的视图,该系统可以选择到从内存中删除这些看法。 视图控制器的观点已被释放,并为您执行任何最后清理的机会后,此方法被调用。 如果您的视图控制器存储分离到视图或它的子视图的引用,你应该使用这个方法来释放这些引用。 您也可以使用此方法来删除您创建支持这样的观点,但认为现在该视图消失不再需要的所有对象的引用。 你不应该使用这个方法来释放用户数据或不能轻易地重新创建的任何其他信息。
所以你设置属性,以nil
现在为了释放对象和帮助系统释放一些内存。 但是,当然,这取决于物业类型-强大的属性是“你的”,只有你可以决定是否释放他们,现在(通过设置到nil
)或没有。 弱性质可能已经nil
,例如,如果他们指着那跟主视图中发布了一些看法。 和unsafe_unretained
性质是一种特殊的野兽。 它们指向的对象可能已被释放,但这并不意味着他们被设置为nil
自动。 所以,你应该要么使用“安全”的属性类型(强/弱)之一,或将不安全的属性nil
这里,以确保以后不会使用所释放的对象。 有在这种情况下,没有硬性规则,你必须考虑这一问题,并意味着什么的各种属性。
顺便说一句, viewDidUnload
是越来越弃用iOS 6中,在没有意见被低内存情况下发布了。 您仍然收到didReceiveMemoryWarning
回调,这样就可以有释放一些资源,如果你想。 再次,我建议你阅读文档,并运行一些测试,看看会发生什么,并决定你应该做的。
ARC将只释放出不持有的强引用一个对象的属性。 根据你的情况,这些都是强引用,所以他们将被保留,除非它们被明确地设置为零。
该viewDidUnload
方法并不意味着你UIViewController
从内存中删除,它只是意味着其意见从内存中清除( iOS开发-视图控制器生命周期 )。
在这种情况下,您UIViewController
保留在内存中,因此,其性能,除非它们被明确地设定为零。
当您使用unsafe_unretained,你应该将其分配到零,因为它不会被分配给无隐,这里是弱引用情况下,它会为了避免需要分配给无任何悬挂引用被分配到零implicitly.So在unsafe_unretained情况。