방금 ARC 자습서를 따라이 코드가 제공되었습니다.ARC와 정확히 작동하는 방법.
아래의 ViewController 클래스와 그 아래에 Vehicle 클래스가 있습니다.
내가 얻은 것은 ARC가 기본적으로 인스턴스화 된 클래스를 추적하고 그에 대한 메모리를 할당한다는 것입니다. 인스턴스에 대한 "강력한"참조가 작성되면 아크는 인스턴스에 대한 참조 수를 증가시킵니다. 모두가 nil로 설정되면 ARC는 인스턴스를 메모리에서 할당 해제합니다. 강사는 또한 모든 참조가 사용되지 않으면 메모리에서 할당을 해제합니다. 나는 그들이 "사용"되지 않는 부분을 잘 이해하지 못했기 때문에 코드가없는 다른 View Controller를 제공하는 버튼을 추가하기로 결정했습니다. 다음 뷰 컨트롤러로 이동하면 뷰 컨트롤러 1에서 참조가 호출되고 deinit가 사용되지 않고 메모리에서 할당이 해제된다는 것을 알았습니다. 이것은 사실이 아니었고 국장은 부름을받지 않았습니다. 그러므로, 나는 당신이 그것들을 무효로 설정하지 않는다면 참조가 메모리에 남아 있는지 궁금합니다.
질문 2 : 또한 질문에 대답하는 동안 또 다른 질문이 있습니다. ARC가 내가 본 문서 또는 튜토리얼의 모든 부분부터 클래스 인스턴스와 참조에 적용되는지 궁금합니다. 클래스 인스턴스 만 언급하는 것 같습니다. 예를 들어 var number = 2 var othernumber = number
을 설정하면 "숫자"도 메모리에 저장되고 모든 숫자가 0이 될 때까지 할당이 취소됩니다. 이 경우에도 똑같은 질문이 적용됩니다. 메모리에서 할당 해제하는 유일한 방법은 모든 참조를 nil과 동일하게 설정하는 것입니다. 긴 질문에 대한 미안하지만, 메모리 개념에 아주 새로운 메신저.
import UIKit
class ViewController: UIViewController {
var ref1: Vehicle?
var reference2: Vehicle?
var ref3: Vehicle?
var timer: NSTimer!
var count = 0
override func viewDidLoad() {
super.viewDidLoad()
ref1 = Vehicle(kind: "Car")
reference2 = ref1
ref3 = ref1
timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(tick), userInfo: nil, repeats: true)
}
func tick() {
count++
if count >= 3 {
ref3 = nil
reference2 = nil
}
if count == 5 {
ref1 = nil
}
}
}
class Vehicle {
let type: String
init(kind: String){
self.type = kind
print("\(type) is being initialized")
//when the class is instantiated, we get an initialization message. When class is deallocated, we get a deinit message. As in, all strong references are gone, we can deinitialize.
}
deinit {
//class vehicle not in memory anymore as all strong references to it have been destroyed. This will be tested with segue as well.
print("\(type) is being deinitialized")
}}
어떤 상황에서 강력한 참조가 "out of scope"가 될지에 대해 Rob에게 문의 해 주셔서 감사합니다. – slimboy
또한 값 유형을 추측하고 있으며, 또한 메모리에 할당되고 할당이 취소됩니다. 프로그래머는 메모리 공간을 확보하기 위해 직접 할당을 해제해야합니까? – slimboy
그걸 정리 해줘서 고마워, 지금 당장. – slimboy