swift单例与init一起使用(编码器:)

时间:2015-07-27 11:55:05

标签: ios swift singleton

我正在尝试使用单例创建一个可重用的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。

2 个答案:

答案 0 :(得分:2)

尝试awakeAfter(使用:)。如果self是您需要的并且替换它,这个方法是一个检查的好地方。返回sharedInstance和self将被替换。

答案 1 :(得分:1)

一种方法是直接从故事板中抓取场景:

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