Hacking with swift 를 진행하다가 나온 내용이라 부족함을 느껴 따로 공부해보는 시간을 갖겠다.
먼저 Swift ARC(Auto Reference Counting) 이라고해서 컴파일 시점에서 다시 사용할 메모리 소스들을 자동으로 삽입해준다.
가비지 컬렉터와 달리 참조 사이클을 자동으로 처리해주지 않기 때문에 메모리 누수가 발생 할 수도 있다.
서로 다른 객체가 서로를 참조하면 순환 참조가 계속되 메모리가 해제되지않고 메모리 누수가 발생한다.
이것을 해결하기 위한 것이 weak 과 unowned이 있다.
이 차이점은
weak키워드는 optional에 사용할 수 있으며, unowned는 non-optional인 경우에만 사용 가능합니다.
따라서 unowned는 옵셔널 추출이 필요하지 않지만, 참조하는 객체의 메모리가 해제된 상태에서 객체에 메세지를 보내면 bad access에러가 발생됩니다.
참조 계수가 0이되어 해제된다면?
weak는 참조 값이 nil로 대체됩니다.
unowned는 참조 값이 그대로 유지됩니다.
하지만 unowned는 해제된 객체에 접근이 가능해 에러를 발생 시킬 수 있으므로,
약한참조가 필요한 경우 weak 키워드만을 사용하고, guard let(또는 if let) 구문을 통해 안전하게 옵셔널 추출하는 것을 권장합니다.
'개발 > 개발' 카테고리의 다른 글
[iOS] - 코코아 터치 프레임워크란? (0) | 2020.05.27 |
---|---|
[iOS] - Foundation Kit이란? (0) | 2020.05.27 |
[iOS] - 뷰컨트롤러 간 값 전달/직접전달방식(동기방식) (0) | 2020.01.10 |
[iOS] - SQLite3 기존 DB 사용하기 (0) | 2019.12.01 |
[iOS] - Alert 알림창 띄우기 (actionSheet Style) - 2 (0) | 2019.11.19 |