Raj*_*Raj 6 iphone xcode objective-c ipad automatic-ref-counting
我是iphone开发的新手.我正在为我的项目使用ARC.据我所知,使用ARC我们不必手动释放任何对象.但是,我在某些地方观察到,即使在使用ARC之后,人们也在ViewDidUnload中明确地将其对象设置为nil.
例如,在.h文件中我有这样的东西:
@property (unsafe_unretained, nonatomic) IBOutlet MKMapView *mapViewOutlet;
@property (unsafe_unretained, nonatomic) IBOutlet UIToolbar *toolBar;
@property (strong,nonatomic) NSMutableArray *dataArray;
Run Code Online (Sandbox Code Playgroud)
而.m如下:
- (void)viewDidUnload
{
[self setMapViewOutlet:nil];
[self setToolBar:nil];
[super viewDidUnload];
self.dataArray=nil;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,即使在ARC下,是否真的有必要在ViewDidUnload中明确指定nil?
zou*_*oul 10
该viewDidUnload方法的重点是释放您不需要的数据,以释放内存.阅读文档:
当发生内存不足的情况并且不需要当前视图控制器的视图时,系统可以选择从内存中删除这些视图.在视图控制器的视图发布后调用此方法,并且您有机会执行任何最终清理.如果视图控制器存储对视图或其子视图的单独引用,则应使用此方法来释放这些引用.您还可以使用此方法删除对您为支持视图而创建的任何对象的引用,但现在视图已不再使用.您不应使用此方法来释放用户数据或任何其他无法轻松重新创建的信息.
因此,您要将属性设置为现在nil释放对象并帮助系统释放一些内存.但当然这取决于属性类型 - 强属性是"你的",只有你可以决定是否现在释放它们(通过设置为).弱属性可能已经存在,例如,如果它们指向一些与主视图一起发布的视图.而属性是一种特殊的野兽.他们指向的对象可能已经被释放,但这并不意味着它们被自动设置.因此,您应该使用其中一种"更安全"的属性类型(强/弱),或者将不安全的属性设置为此处,以确保您以后不会使用已释放的对象.在这种情况下没有硬规则,您必须考虑情况及其对各种属性的意义.nilnilunsafe_unretainednilnil
顺便说一句,viewDidUnload在iOS 6中已经被弃用,在低内存条件下不再发布任何视图.您仍然会收到didReceiveMemoryWarning回调,以便您可以在那里释放一些资源.同样,我建议你阅读文档并运行一些测试,看看会发生什么,并决定你应该做什么.
| 归档时间: |
|
| 查看次数: |
2744 次 |
| 最近记录: |