我正在尝试使用单例创建一个可重用的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(编码器:)时返回sharedInstance这个主题的通用答案,这样我就可以在任何Storyboard文件中使用我的组件,而无需使用代码来使用sharedInstance。
答案 0 :(得分:2)
尝试awakeAfter(使用:)。如果self是您需要的并且替换它,这个方法是一个检查的好地方。返回sharedInstance和self将被替换。
答案 1 :(得分:1)
一种方法是直接从故事板中抓取场景:
static let sharedInstance = (UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("identifier") as! UIViewController).view