私の最初のGameViewController
に初期のViewControllerのための強力なデリゲートを使用すると、GameDelegate
のデリゲートプロパティを持っています。私はAppDelegate
でこのプロパティを設定しています:AppDelegate
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
//Set initial view controller
window = UIWindow(frame: UIScreen.main.bounds)
if let window = window {
let gameTracker = GameTracker()
let gameViewController = GameViewController()
gameViewController.delegate = gameTracker
window.rootViewController = gameViewController
window.makeKeyAndVisible()
}
return true
}
これだけ作品私のデリゲートが強いため:デリゲートは、後にはnilとなりますので、弱いデリゲートを使用して
class GameViewController: UIViewController{
var delegate: GameDelegate?
var gameScore: GameScore {
return (delegate!.gameScore)
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
は、AppがクラッシュしますGameViewController
が提示される。
私の質問は次のとおりです。このアプローチは安全です、とされていない場合、それがどのように行われるべき?私はデリゲートについて読んだことがあり、保持サイクルを防ぐために弱いvarとして保持することをお勧めします。私はストーリーボードを使用していません。
私は本当にARCからの2つの参照を数えたので、これは意味があります。ありがとうございました! – Hapeki