假设我想创建一个临时变量,例如:
指向另一个长寿命变量:
__unsafe_unretained UIView *tableHeaderView = self.tableView.tableHeaderView;
指向我刚创建的对象。
__unsafe_unretained UIView *tableHeaderView = [[UIView alloc] init];
这些临时变量不需要保留,因为只要临时变量在范围内,它们指向的对象就可以保证保留正保留计数。那么,我应该将它们声明为__unsafe_unretained
吗?
答案 0 :(得分:5)
如果系统保留你的临时变量,为什么重要?事实上,你想要保留它。
考虑:
__unsafe_unretained UIView *tableHeaderView = self.tableView.tableHeaderView
self.tableView.tableHeaderView = nil;
NSLog(@"%@", tableHeaderView); //<-I WILL CRASH
答案 1 :(得分:2)
马特,
ARC的重点是让你忽略这些问题。实际上,编译器甚至可能不会保留这些实例。
让p担心这些问题。在编译器或静态分析器抱怨之前,不要试图帮助它。 (顺便说一下,你让分析器在每次编译时都运行,对吗?它在你创建时会发现问题。)您应该只担心在循环中创建多余的对象并管理大对象的创建。前者通过明智地使用@autorelease
来处理。你仍然像你做的那样管理大件物品。
安德鲁
答案 2 :(得分:1)
没有。如果ARC保留它,它将在变量超出范围时放开。