我的应用程序具有在整个应用程序中使用的搜索视图(搜索栏)。我不想创建重复的代码,所以我创建了一个名为MySearchViewController的视图控制器来处理搜索任务,然后在AppDelegate中创建了一个单例对象。在每个视图控制器中,我都这样添加了搜索视图:
- (void)viewDidLoad
{
MySearchViewController* search = [AppDelegate searchViewController];
[self.view addSubView:search.view];
}
我的问题是,这是个好方法吗?这是一个单例,因此可以将其添加到许多视图中。添加到当前视图之前,我需要从最后一个视图中删除该视图吗?
最佳答案
了解您正在混合一些不一定相关的概念:避免重复的代码和单例。
Wikipedia谈到单身人士:
在软件工程中,单例模式是一种将类的实例化限制为一个对象的设计模式。当仅需要一个对象来协调整个系统中的动作时,这很有用。有时将该概念推广到仅存在一个对象的情况下运行效率更高的系统,或者将实例化限制为一定数量的对象的系统。该术语来自单例的数学概念。
单例的最重要特征(以我的拙见)是对象仅实例化一次,并且应用程序中的每个单独位置都将使用同一实例。好吧,要在所有地方使用搜索功能并避免重复的代码,您不需要只实例化搜索视图一次,也许只需要实例化附带的数据,而不必实例化视图本身。
实现此目的的两种更好的方法:
1-您可以使用搜索创建一个ViewController,然后使用Container View将其嵌入到其他视图中,可以使用块或委托协议在控制器和嵌入它的视图之间进行通信。
2-您可以创建将包含搜索栏的ViewController的Parent类,例如SearchViewController,并且所有其他需要相同功能的viewController将从其继承。
如果您打算在应用程序的所有ViewController之间共享相同的搜索数据和文本,则单例可能会很有用,但是只有这些信息才能成为单例,UISearchBar和所有其他视图元素不应成为单例的一部分。
关于ios - 可以将同一ViewController.view作为 subview 作为Singleton添加到不同的 View 吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32758485/