2015-11-09 3 views
-1

У меня следующая структураИщете понять, почему делегат живёт

Main ViewController: он отвечает за вызов контроллера (A). (A) ViewController: создать экземпляр CustomClass и имеет делегат для этого класса. CustomClass: в каждом периоде в 1 секунду сообщение отправляется на контроллер (A) через делегат.

До здесь все работает нормально. Как только я вернусь в Main ViewController, делегат останется в живых, другими словами, делегат обновит переменную A (ViewController). Я проверил, что viewDidDisappear из (A) ViewController вызывается. Когда я снова вернусь из Main ViewController в (A) ViewController, создается новый экземпляр переменной. В любом случае, я этого не понимаю.

Помимо этого сомнения, я хотел бы понять, почему делегат остается в живых, когда я возвращаюсь к контроллеру основного вида. Я использую UINavigationItem для навигации.

Я новичок в разработке IOS.

Спасибо заранее!

Редактировать 1: (A) ViewController вызывается из MainViewController Segue. Сегю добавили через раскадровку.

MainViewController.swift

class ViewController: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


} 

AViewController.swift

class ScanDevices : UIViewController, CustomClassDelegate { 

    var myInts : [Int] = [] 

    var customClass : CustomClass! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     print("viewDidLoad") 

     if customClass == nil { 
      customClass = CustomClass() 
      customClass.customClassDelegate = self 
     } 
    } 

    override func viewWillAppear(animated: Bool) { 
     print("viewWillAppear") 
    } 

    override func viewDidAppear(animated: Bool) { 
     print("viewDidAppear") 
    } 

    override func viewWillDisappear(animated: Bool) { 
     print("viewWillDisappear") 
    } 

    override func viewDidDisappear(animated: Bool) { 
     print("viewDidDisappear") 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func didDiscoverPeripheralInt(peripheral: Int) { 

     myInts.append(peripheral) 
     print("Number = \(myInts.count)") 
    } 
} 

CustomClass.swift

class CustomClass : NSObject { 

    var customClassDelegate : CustomClassDelegate? 

    // MARK: init 

    override init() { 
     super.init() 

     NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "writeInt", userInfo: nil, repeats: true) 
    } 

    func writeInt() { 
     CustomClassDelegate?.didDiscoverPeripheralInt(3) 
    } 
} 
+0

Ваш вопрос показывает кучу преимущественно пустых методов - как они полезны? Где создаются экземпляры? Когда каждый класс вызывает других? Укажите детали, связанные с вопросом. – Wain

+0

Извините, я редактировал код AViewController. Экземпляр CustomClass создается в методе viewDidLoad MainViewController. Остальные пустые методы - это только понимание жизненного цикла контроллера. – Arubu

ответ

0

Ваш CustomClass имеет сильную ссылку на делегата. Вы должны отметить свойство с weak:

weak var customClassDelegate : CustomClassDelegate? 
Смежные вопросы