공공데이터 RESTful api 를 가져오는 간단한 코드를 작성했다.
resultCode와 resultMsg를 가져와보자.
사실 이렇게 생겼는데,, 쉬운거 부터 가져와보자..
url을 담을 수 있는 구조체를 만드는데, 이 안에 클로져가 있다.
클로져는 미리 선언되어있지 않다.
1.The function then calls the closure and executes its code, as if the closure is an ordinary function.(클로저가 마치 원래 그곳에 있었던 애 마냥 실행한다)
2. array.sorted(by: <)에서 파라미터가 클로져였다니 놀랍다. shorthand와 trailing 적용해서..
3.In Swift, a closure captures variables and constants from its surrounding scope. 바깥에서 클로져가 쓰일 수 있는 이유이다. 우리 코드에서보면, 바깥에서 들어오는 파라미터인 data를 사용하고 내부에 있는 요소를 사용할 수있다.
ios 는 앱의 메모리 사용을 추적,관리하기 위해 arc기능 사용.
automatic reference counting. 참조 메모리 관리 자동 기능.
참조 회수 카운팅 0 = 그 인스턴스에 대한 메모리 해제.
사용중인데 메모리 해제 하면 crash. 필요하는 동안에 strong reference유지.
하나의 클래스 인스턴스에 여러개의 강한 참조가 연결될 수 있다.
위의 코드와 같이 문제: 두개의 인스턴스가 서로 참조할때 strong reference cycle 발생.-> 래퍼런스 카운트가 0 이 될 수없다. 즉 메모리 누수.
weak var cat 함으로써, cat을 가르키는 strong reference가 +1 되지않아서, cat = nil하면 deinit 된다.
참고로, let a = b as? Database// 이것도 참조시작됨.