arc3 Swift) weak, unowned weak 이전 글에서 다룬 weak에 대해 새로이 안게 있어서.. class Person { var name: String weak var puppy: Puppy? init(name: String) { self.name = name } deinit { print("Person deinit") } } class Puppy { var name: String var owner: Person? init(name: String) { self.name = name } deinit { print("Puppy deinit") } } var john: Person? = Person(name: "John") var jackson: Puppy? = Puppy(name: "Jackson") john?.puppy = jacks.. 2022. 2. 13. Swift) 순환 참조 , strong, weak 순환 참조란 순환 참조란 여러 클래스 인스턴스가 서로간에 강한 참조상태(Strong Reference)를 가질 때 발생하고, 순환 참조가 발생하게되면 서로간의 참조가 해제되지 않기때문에 메모리 누수(Leak)가 발생할 수 있다. 순환 참조 예 class Person { var name: String var puppy: Puppy? init(name: String) { self.name = name } deinit { print("Person deinit") } } class Puppy { var name: String var owner: Person? init(name: String) { self.name = name } deinit { print("Puppy deinit") } } var john: P.. 2022. 2. 13. Swift) ARC ARC ARC는 Automatic Reference Counting의 약자이다. 레퍼런스 카운트를 자동으로 해준다고 이름에서 바로 알 수 있다. ARC의 이름..의 좀 더 깊은.. 뜻을 알기위해 ARC가 있기 전에 있던 방식을 알아보자 ARC 이전엔? ARC가 있기 전엔 MRC(Manual Reference Counting)라는 것이 있었다. MRC도 마찬가지로 MANUAL이란 이름에서 알 수 있듯이 레퍼런스 카운트를 수동으로 해주었다는 것을 알 수 있다. retain, new, alloc등을 사용해 레퍼런스 카운트를 올리고, release 등을 사용하여 레퍼런스 카운트를 내려 레퍼런스 카운트가 0이 되면 클래스 인스턴스를 deinit 시켜줬었다. ARC는 그럼 뭔데요 MRC 방식은 RC를 언제 올려주고.. 2022. 2. 13. 이전 1 다음