본문 바로가기

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.