Fixes various strong reference cycle leaks

This commit is contained in:
Riley Testut 2016-08-10 23:10:46 -05:00
parent da7705aaff
commit 694adb6c6c
8 changed files with 19 additions and 38 deletions

@ -1 +1 @@
Subproject commit 1fc24e32383868e7eaf78d01b36ff155a2915daa Subproject commit 670a55012fcba808416e85cc7fa66a0ba135ab1d

View File

@ -10,7 +10,6 @@
BF02BD001D361BD1000892F2 /* NSFetchedResultsController+Conveniences.m in Sources */ = {isa = PBXBuildFile; fileRef = BF02BCFF1D361BD1000892F2 /* NSFetchedResultsController+Conveniences.m */; }; BF02BD001D361BD1000892F2 /* NSFetchedResultsController+Conveniences.m in Sources */ = {isa = PBXBuildFile; fileRef = BF02BCFF1D361BD1000892F2 /* NSFetchedResultsController+Conveniences.m */; };
BF0418141D01E93400E85BCF /* GBADeltaCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF0418131D01E93400E85BCF /* GBADeltaCore.framework */; }; BF0418141D01E93400E85BCF /* GBADeltaCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF0418131D01E93400E85BCF /* GBADeltaCore.framework */; };
BF0418151D01E93400E85BCF /* GBADeltaCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BF0418131D01E93400E85BCF /* GBADeltaCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF0418151D01E93400E85BCF /* GBADeltaCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BF0418131D01E93400E85BCF /* GBADeltaCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
BF04A5A31CF8E61C00B4A267 /* UIViewController+PeekPop.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF04A5A21CF8E61C00B4A267 /* UIViewController+PeekPop.swift */; };
BF090CF41B490D8300DCAB45 /* UIDevice+Vibration.m in Sources */ = {isa = PBXBuildFile; fileRef = BF090CF31B490D8300DCAB45 /* UIDevice+Vibration.m */; }; BF090CF41B490D8300DCAB45 /* UIDevice+Vibration.m in Sources */ = {isa = PBXBuildFile; fileRef = BF090CF31B490D8300DCAB45 /* UIDevice+Vibration.m */; };
BF0CDDAD1C8155D200640168 /* LoadImageOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF0CDDAC1C8155D200640168 /* LoadImageOperation.swift */; }; BF0CDDAD1C8155D200640168 /* LoadImageOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF0CDDAC1C8155D200640168 /* LoadImageOperation.swift */; };
BF107EC41BF413F000E0C32C /* GamesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF107EC31BF413F000E0C32C /* GamesViewController.swift */; }; BF107EC41BF413F000E0C32C /* GamesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF107EC31BF413F000E0C32C /* GamesViewController.swift */; };
@ -95,7 +94,6 @@
BF02BCFE1D361BD1000892F2 /* NSFetchedResultsController+Conveniences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSFetchedResultsController+Conveniences.h"; sourceTree = "<group>"; }; BF02BCFE1D361BD1000892F2 /* NSFetchedResultsController+Conveniences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSFetchedResultsController+Conveniences.h"; sourceTree = "<group>"; };
BF02BCFF1D361BD1000892F2 /* NSFetchedResultsController+Conveniences.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSFetchedResultsController+Conveniences.m"; sourceTree = "<group>"; }; BF02BCFF1D361BD1000892F2 /* NSFetchedResultsController+Conveniences.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSFetchedResultsController+Conveniences.m"; sourceTree = "<group>"; };
BF0418131D01E93400E85BCF /* GBADeltaCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = GBADeltaCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BF0418131D01E93400E85BCF /* GBADeltaCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = GBADeltaCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
BF04A5A21CF8E61C00B4A267 /* UIViewController+PeekPop.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewController+PeekPop.swift"; sourceTree = "<group>"; };
BF090CF11B490D8300DCAB45 /* Delta-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Delta-Bridging-Header.h"; sourceTree = "<group>"; }; BF090CF11B490D8300DCAB45 /* Delta-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Delta-Bridging-Header.h"; sourceTree = "<group>"; };
BF090CF21B490D8300DCAB45 /* UIDevice+Vibration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIDevice+Vibration.h"; sourceTree = "<group>"; }; BF090CF21B490D8300DCAB45 /* UIDevice+Vibration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIDevice+Vibration.h"; sourceTree = "<group>"; };
BF090CF31B490D8300DCAB45 /* UIDevice+Vibration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIDevice+Vibration.m"; sourceTree = "<group>"; }; BF090CF31B490D8300DCAB45 /* UIDevice+Vibration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIDevice+Vibration.m"; sourceTree = "<group>"; };
@ -190,7 +188,6 @@
BF090CF31B490D8300DCAB45 /* UIDevice+Vibration.m */, BF090CF31B490D8300DCAB45 /* UIDevice+Vibration.m */,
BF797A2C1C2D339F00F1A000 /* UILabel+FontSize.swift */, BF797A2C1C2D339F00F1A000 /* UILabel+FontSize.swift */,
BF7AE8091C2E8C7600B1B5BC /* UIColor+Delta.swift */, BF7AE8091C2E8C7600B1B5BC /* UIColor+Delta.swift */,
BF04A5A21CF8E61C00B4A267 /* UIViewController+PeekPop.swift */,
BFCEA67D1D56FF640061A534 /* UIViewControllerContextTransitioning+Conveniences.swift */, BFCEA67D1D56FF640061A534 /* UIViewControllerContextTransitioning+Conveniences.swift */,
); );
path = Extensions; path = Extensions;
@ -588,7 +585,6 @@
BF7AE81E1C2E984300B1B5BC /* GridCollectionViewCell.swift in Sources */, BF7AE81E1C2E984300B1B5BC /* GridCollectionViewCell.swift in Sources */,
BF34FA111CF1899D006624C7 /* CheatTextView.swift in Sources */, BF34FA111CF1899D006624C7 /* CheatTextView.swift in Sources */,
BFFC46231D5984A000AF2CC6 /* LaunchViewController.swift in Sources */, BFFC46231D5984A000AF2CC6 /* LaunchViewController.swift in Sources */,
BF04A5A31CF8E61C00B4A267 /* UIViewController+PeekPop.swift in Sources */,
BF4566E81BC090B6007BFA1A /* Model.xcdatamodeld in Sources */, BF4566E81BC090B6007BFA1A /* Model.xcdatamodeld in Sources */,
BFDE393C1BC0CEDF003F72E8 /* Game.swift in Sources */, BFDE393C1BC0CEDF003F72E8 /* Game.swift in Sources */,
BF34FA071CF0F510006624C7 /* EditCheatViewController.swift in Sources */, BF34FA071CF0F510006624C7 /* EditCheatViewController.swift in Sources */,

View File

@ -173,13 +173,6 @@ extension GameViewController
self.updateControllers() self.updateControllers()
} }
override func viewDidLayoutSubviews()
{
super.viewDidLayoutSubviews()
self.controllerView.isHidden = self.isPreviewing
}
// MARK: - Segues // MARK: - Segues
/// KVO /// KVO
@ -213,7 +206,7 @@ extension GameViewController
} }
pauseViewController.sustainButtonsItem?.selected = (self.sustainedInputs[ObjectIdentifier(gameController)]?.count ?? 0) > 0 pauseViewController.sustainButtonsItem?.selected = (self.sustainedInputs[ObjectIdentifier(gameController)]?.count ?? 0) > 0
pauseViewController.sustainButtonsItem?.action = { [unowned self] item in pauseViewController.sustainButtonsItem?.action = { [unowned self, unowned pauseViewController] item in
self.resetSustainedInputs(for: gameController) self.resetSustainedInputs(for: gameController)

View File

@ -1,18 +0,0 @@
//
// UIViewController+PeekPop.swift
// Delta
//
// Created by Riley Testut on 5/27/16.
// Copyright © 2016 Riley Testut. All rights reserved.
//
import Foundation
extension UIViewController
{
var isPreviewing: Bool
{
guard let presentationController = self.presentationController else { return false }
return NSStringFromClass(presentationController.dynamicType).contains("PreviewPresentation")
}
}

View File

@ -36,7 +36,9 @@ class GamesCollectionViewController: UICollectionViewController
super.init(coder: aDecoder) super.init(coder: aDecoder)
self.dataSource.fetchedResultsController.delegate = self self.dataSource.fetchedResultsController.delegate = self
self.dataSource.cellConfigurationHandler = self.configureCell self.dataSource.cellConfigurationHandler = { [unowned self] (cell, game) in
self.configureCell(cell, game: game)
}
} }
override func viewDidLoad() override func viewDidLoad()

View File

@ -247,12 +247,14 @@ extension CheatsViewController: UIViewControllerPreviewingDelegate
let cheat = self.fetchedResultsController.object(at: indexPath) as! Cheat let cheat = self.fetchedResultsController.object(at: indexPath) as! Cheat
let editCheatViewController = self.makeEditCheatViewController(cheat: cheat) let editCheatViewController = self.makeEditCheatViewController(cheat: cheat)
editCheatViewController.isPreviewing = true
return editCheatViewController return editCheatViewController
} }
func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController)
{ {
let editCheatViewController = viewControllerToCommit as! EditCheatViewController let editCheatViewController = viewControllerToCommit as! EditCheatViewController
editCheatViewController.isPreviewing = false
editCheatViewController.presentWithPresentingViewController(self) editCheatViewController.presentWithPresentingViewController(self)
} }
} }

View File

@ -41,6 +41,8 @@ class EditCheatViewController: UITableViewController
weak var delegate: EditCheatViewControllerDelegate? weak var delegate: EditCheatViewControllerDelegate?
var isPreviewing = false
private var supportedCheatFormats: [CheatFormat]! private var supportedCheatFormats: [CheatFormat]!
private var selectedCheatFormat: CheatFormat { private var selectedCheatFormat: CheatFormat {
@ -69,6 +71,7 @@ class EditCheatViewController: UITableViewController
// Delaying until next run loop prevents self from being dismissed immediately // Delaying until next run loop prevents self from being dismissed immediately
DispatchQueue.main.async { DispatchQueue.main.async {
let editCheatViewController = viewController as! EditCheatViewController let editCheatViewController = viewController as! EditCheatViewController
editCheatViewController.isPreviewing = false
editCheatViewController.presentWithPresentingViewController(presentingViewController) editCheatViewController.presentWithPresentingViewController(presentingViewController)
} }
} }

View File

@ -443,14 +443,14 @@ private extension SaveStatesViewController
{ {
if saveState.game.previewSaveState != saveState if saveState.game.previewSaveState != saveState
{ {
let previewAction = Action(title: NSLocalizedString("Set as Preview Save State", comment: ""), style: .default, action: { action in let previewAction = Action(title: NSLocalizedString("Set as Preview Save State", comment: ""), style: .default, action: { [unowned self] action in
self.updatePreviewSaveState(saveState) self.updatePreviewSaveState(saveState)
}) })
actions.append(previewAction) actions.append(previewAction)
} }
else else
{ {
let previewAction = Action(title: NSLocalizedString("Remove as Preview Save State", comment: ""), style: .default, action: { action in let previewAction = Action(title: NSLocalizedString("Remove as Preview Save State", comment: ""), style: .default, action: { [unowned self] action in
self.updatePreviewSaveState(nil) self.updatePreviewSaveState(nil)
}) })
actions.append(previewAction) actions.append(previewAction)
@ -460,7 +460,7 @@ private extension SaveStatesViewController
let cancelAction = Action(title: NSLocalizedString("Cancel", comment: ""), style: .cancel, action: nil) let cancelAction = Action(title: NSLocalizedString("Cancel", comment: ""), style: .cancel, action: nil)
actions.append(cancelAction) actions.append(cancelAction)
let renameAction = Action(title: NSLocalizedString("Rename", comment: ""), style: .default, action: { action in let renameAction = Action(title: NSLocalizedString("Rename", comment: ""), style: .default, action: { [unowned self] action in
self.renameSaveState(saveState) self.renameSaveState(saveState)
}) })
actions.append(renameAction) actions.append(renameAction)
@ -469,19 +469,19 @@ private extension SaveStatesViewController
{ {
case .auto: break case .auto: break
case .general: case .general:
let lockAction = Action(title: NSLocalizedString("Lock", comment: ""), style: .default, action: { action in let lockAction = Action(title: NSLocalizedString("Lock", comment: ""), style: .default, action: { [unowned self] action in
self.lockSaveState(saveState) self.lockSaveState(saveState)
}) })
actions.append(lockAction) actions.append(lockAction)
case .locked: case .locked:
let unlockAction = Action(title: NSLocalizedString("Unlock", comment: ""), style: .default, action: { action in let unlockAction = Action(title: NSLocalizedString("Unlock", comment: ""), style: .default, action: { [unowned self] action in
self.unlockSaveState(saveState) self.unlockSaveState(saveState)
}) })
actions.append(unlockAction) actions.append(unlockAction)
} }
let deleteAction = Action(title: NSLocalizedString("Delete", comment: ""), style: .destructive, action: { action in let deleteAction = Action(title: NSLocalizedString("Delete", comment: ""), style: .destructive, action: { [unowned self] action in
self.deleteSaveState(saveState) self.deleteSaveState(saveState)
}) })
actions.append(deleteAction) actions.append(deleteAction)
@ -581,6 +581,9 @@ extension SaveStatesViewController: UIViewControllerPreviewingDelegate, UIPrevie
emulatorCore.stop() emulatorCore.stop()
} }
self.previewGameViewController.loadViewIfNeeded()
self.previewGameViewController.controllerView.isHidden = true
self.previewGameViewController.game = self.game self.previewGameViewController.game = self.game
self.previewGameViewController.emulatorCore?.start() self.previewGameViewController.emulatorCore?.start()
self.previewGameViewController.emulatorCore?.pause() self.previewGameViewController.emulatorCore?.pause()