Search
Duplicate

Strong reference cycle

์ƒ์„ฑ์ผ
2023/06/29 09:13
ํƒœ๊ทธ
Swift

Strong reference cycle

// // ViewController.swift // FirstNewApp // // Created by KIM Hyung Jun on 2023/06/29. // import UIKit import AVFoundation class ViewController: UIViewController { @IBOutlet weak var mainLabel: UILabel! @IBOutlet weak var slider: UISlider! weak var timer: Timer? var number: Int = 0 override func viewDidLoad() { super.viewDidLoad() configureUI() } func configureUI() { mainLabel.text = "์ดˆ๋ฅผ ์„ ํƒํ•˜์„ธ์š”" slider.value = 0.5 } @IBAction func sliderChanged(_ sender: UISlider) { // ์Šฌ๋ผ์ด๋”์˜ value ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ๋ฉ”์ธ๋ ˆ์ด๋ธ”์˜ ํ…์ŠคํŠธ๋ฅผ ์„ธํŒ… let seconds = Int(slider.value * 60) mainLabel.text = "\(seconds)์ดˆ" number = seconds } @IBAction func startButtonTapped(_ sender: UIButton) { // 1์ดˆ์”ฉ ์ง€๋‚˜๊ฐˆ ๋•Œ๋งˆ๋‹ค ๋ฌด์–ธ๊ฐ€๋ฅผ ์‹คํ–‰ timer?.invalidate() // timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(doSomethingAfter1Second), userInfo: nil, repeats: true) timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { [self] _ in // ๋ฐ˜๋ณต์„ ํ•˜๊ณ  ์‹ถ์€ ์ฝ”๋“œ if number > 0 { number -= 1 // ์Šฌ๋ผ์ด๋”๋„ ์ค„์—ฌ์•ผํ•จ slider.value = Float(number) / Float(60) // ๋ ˆ์ด๋ธ” ํ‘œ์‹œ๋„ ๋‹ค์‹œ ํ•ด์ค˜์•ผ ํ•จ mainLabel.text = "\(number)์ดˆ" } else { number = 0 mainLabel.text = "์ดˆ๋ฅผ ์„ ํƒํ•˜์„ธ์š”" timer?.invalidate() // ์†Œ๋ฆฌ๋ฅผ ๋‚˜๊ฒŒ ํ•ด์•ผํ•จ AudioServicesPlayAlertSound(SystemSoundID(1322)) } } } // @objc func doSomethingAfter1Second() { // if number > 0 { // number -= 1 // // ์Šฌ๋ผ์ด๋”๋„ ์ค„์—ฌ์•ผํ•จ // slider.value = Float(number) / Float(60) // // ๋ ˆ์ด๋ธ” ํ‘œ์‹œ๋„ ๋‹ค์‹œ ํ•ด์ค˜์•ผ ํ•จ // mainLabel.text = "\(number)์ดˆ" // } // else { // number = 0 // mainLabel.text = "์ดˆ๋ฅผ ์„ ํƒํ•˜์„ธ์š”" // timer?.invalidate() // // ์†Œ๋ฆฌ๋ฅผ ๋‚˜๊ฒŒ ํ•ด์•ผํ•จ // AudioServicesPlayAlertSound(SystemSoundID(1322)) // } // } @IBAction func resetButtonTapped(_ sender: UIButton) { // ์ดˆ๊ธฐํ™” ์„ธํŒ… mainLabel.text = "์ดˆ๋ฅผ ์„ ํƒํ•˜์„ธ์š”" slider.value = 0.5 number = 0 timer?.invalidate() // slider.setValue(0.5, animated: false) } }
Swift
๋ณต์‚ฌ
weak var timer: Timer?
Swift
๋ณต์‚ฌ
์ด๋ ‡๊ฒŒ weak ์œผ๋กœ ์„ ์–ธ์„ ํ•ด์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, Strong Reference Cycle์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.
๊ทธ๋ž˜์„œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๊ฐˆ ์ž˜๋  ์ˆ˜ ์žˆ๋‹ค.
timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { [self] _ in
Swift
๋ณต์‚ฌ
๋˜ํ•œ ์—ฌ๊ธฐ์„œ
[weak self]๋กœ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค!
Swift
๋ณต์‚ฌ