这主要是一个风格问题,但自从我开始为iPhone编程以来,我一直很好奇其他人的想法.当您的iPhone应用程序中有UIView并且您需要在应用程序的其他位置访问它时(通常在视图控制器中的另一个函数中),您是否喜欢用整数标记视图并使用viewWithTag:
消息检索它,或者您是否通常将它设置为视图控制器中的属性,以便以后轻松访问?
将它保存为属性显然会使以后检索更容易,但我认为通过标记视图而不是将其设置为对象属性,可以节省一些(可能是可忽略的)内存量.
我一般都在我的视图控制器上创建属性,主要是因为我很懒,并且检索视图viewWithTag:
很烦人.
没有内存可以通过不使用属性来保存 - 一个属性只生成一小部分代码,这些代码引用指向您视图的实例变量,如果您指向它,它将被保留.
使用viewWithTag总是更昂贵和更慢,因为该调用必须通过视图层次结构询问每个视图标记值是什么.
我总是使用IBOutlet实例变量,并在控件中添加标签,有时我不需要做任何事情,除了告诉哪个特定控件称为委托方法,可以通过几个不同的控件激活.效率稍低,但在这种情况下代码更容易维护.
我使用属性.内存影响远不是一个需要思考的问题.viewWithTag:也可以刻录一些CPU使用,但我这样做的主要原因是结果更清晰.访问self.leftSideView要比[self.view viewWithTag:LEFTSIDEVIEW]好得多,而且你不必管理枚举来知道发生了什么.
我认为标签对调试很有用,但不能用于日常使用.
我认识到这可能与OP的问题相关,但这可能有助于为Google提供帮助.
我发现UIView标记的一个用途实际上不是通过视图层次结构中的标记找到一个视图(如上所述,可能变得相当昂贵),而是通过委托来区分两个或多个视图它被分配来处理其中的几个,作为一种避免大量属性赋值的方法(这当然可以使UIViewController代码更加紧密耦合).
一个典型的例子是UITableViewController,其UITableViewDataSource委托已被外部化为一个单独的类.假设UITableViewController后来想要添加一个搜索栏,并希望利用相同的UITableViewDataSource.这意味着将调用UITableViewDataSource方法,并且数据源需要经常区分真正的UITableView和UISearchDisplayController上的searchResultsTableView.如果UITableViewController在每个表视图上设置了一个标记,那么数据源可以根据标记值轻松地分支行为,而不需要引用表视图或(更糟糕的是)搜索显示控制器.
再一次,我意识到这不是提问者正在吠叫的那棵树,但它是我发现自己真正感觉良好使用标签的唯一用例.