我应该将__unsafe_unretained用于临时变量吗?

ma1*_*w28 3 objective-c retaincount automatic-ref-counting unsafe-unretained

假设我想创建一个临时变量,例如:

  1. 指向另一个长寿变量:

    __unsafe_unretained UIView *tableHeaderView = self.tableView.tableHeaderView;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 指向我刚刚创建的对象.

    __unsafe_unretained UIView *tableHeaderView = [[UIView alloc] init];
    
    Run Code Online (Sandbox Code Playgroud)

这些临时变量不需要保留,因为只要临时变量在范围内,它们指向的对象就可以保证保留正保留计数.那么,我应该声明它们__unsafe_unretained吗?

Jos*_*erg 5

如果系统保留你的临时变量,为什么重要?事实上,你想要保留它.

考虑:

__unsafe_unretained UIView *tableHeaderView = self.tableView.tableHeaderView
self.tableView.tableHeaderView = nil;
NSLog(@"%@", tableHeaderView); //<-I WILL CRASH
Run Code Online (Sandbox Code Playgroud)

  • 但它无法合理地知道.如果不是直接将其设置为nil,我调用了一些其他方法来触发一系列事件导致tableHeaderView被释放?此外,您正在优化.如果保留物体是您最关心的性能,那么您已经完成了大量的其他工作.对象所有权不会成为你的阻碍点. (2认同)