Ios 与init一起使用的Swift单例(编码器:)

Ios 与init一起使用的Swift单例(编码器:),ios,swift,singleton,Ios,Swift,Singleton,我正在尝试使用单例创建一个可重用的UI组件,这样当显示UI组件时,它总是通过应用程序使用相同的实例(显然,在同一时间只能显示其中一个) 因此,我创建了一个简单的UIView子类,并以Swift 1.2的方式定义了一个sharedInstance。代码如下: import UIKit class MyView: UIView { static let sharedInstance = MyView() } 问题是,我想知道是否有一种方法可以在脚本调用视图时使用这个sharedInsta

我正在尝试使用单例创建一个可重用的UI组件,这样当显示UI组件时,它总是通过应用程序使用相同的实例(显然,在同一时间只能显示其中一个)

因此,我创建了一个简单的UIView子类,并以Swift 1.2的方式定义了一个sharedInstance。代码如下:

import UIKit

class MyView: UIView {
    static let sharedInstance = MyView()
}
问题是,我想知道是否有一种方法可以在脚本调用视图时使用这个
sharedInstance
(通过
init(coder:)
方法)

在ObjC中,这相当容易,因为init方法可以只返回所需的对象,但在Swift中,我不知道这是否可能(因为Swift init不返回对象)

编辑:添加一些上下文(有些人不明白我为什么要这样做)。我试图避免使用一个给定的UI组件,因为我无法控制该组件消耗所有可用内存

此组件是MKMapView,在取消实例化后不会释放它所占用的内存。 我尝试了几种方法,但没有一种方法能够返回MKMapView实例化所占用的全部内存

因此,我尝试在所有地方使用同一个MKMapView实例,以避免使用过多的内存


我问这个问题是为了得到一个关于调用init(coder:)时返回sharedInstance的通用答案,这样我就可以从任何情节提要文件中使用我的组件,而无需添加代码来使用sharedInstance。

一种方法是直接从情节提要中抓取场景:

static let sharedInstance = (UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("identifier") as! UIViewController).view

尝试awakafter(使用:)。这个方法是检查self是否是您需要的并替换它的好地方。Return sharedInstance和self将被替换。

为什么UI组件需要是单体组件?为什么不根据需要创建尽可能多的场景,并将它们连接到同一个模型,以便它们的外观和行为都相同?仅供参考,当您从故事板(
storyboard.instanceeviewcontrollerwhidentifier
)实例化场景时,您实例化的是视图控制器,而不是视图。当该视图控制器第一次引用其视图时,该视图被实例化。@Caleb我正在尝试不同的方法来减少MKMapView内存占用(例如使用同一个实例并在任何地方使用它)。我的例子是使用UIView,因为我想要一个一般性的答案。@Rob是的,我的意思是当被VC引用而自动实例化时,视图使用现有的sharedInstance。对UIView使用单例似乎非常非常不合适。为什么您会关心使用相同的实例?如果你保持状态不变,你不认为UIView是一个非常不适合存储数据的地方吗?