본문 바로가기

분류 전체보기138

Swift) App LifeCycle App-Based Life-Cycle State (iOS 12 and earlier) [참고] 이미지 출처 OS는 각각의 앱마다 모두 상태 변화를 제어하여 어떤 앱은 실행시키고, 어떤 앱은 백그라운드, 어떤 앱은 종료하는 등 다양한 처리를 한다. Apple에서 정의하는 앱의 상태(App State)는 크게 5가지로 구분된다. Not Running: 앱이 시작되지 않았거나, 실행되었지만 시스템에 의해 종료된 상태 Inactive: 앱이 전면(Foreground)에서 실행중이지만, 아무런 이벤트를 받지 않는 상태, 앱의 상태 변화 과정에서 잠깐 머무는 단계 Active: 앱이 전면(Foreground)에서 실행중이며, 이벤트를 받고있는 상태 Background: 앱이 백그라운드에 있지만, 여전히 코드가 실행.. 2022. 2. 13.
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.
Swift) Protocol(1) 프로토콜? 특정 기능, 역할을 하기 위한 프로퍼티, 메소드, 기타 요구사항 등의 청사진 프로토콜 준수, 채택 구조체, 클래스, 열거형은 프로토콜을 채택하여 특정 기능, 역할을 하기위한 프로토콜의 요구 사항을 실제로 구현할 수 있다. "청사진" 이라는 의미에 걸맞게 정의를 하고 설계도만 제공할 뿐 스스로 기능을 구현하지는 않는다. 구현은 프토토콜을 채택한 구조체, 클래스, 열거형에서 구현한다. 프로토콜 구문 protocol 프로토콜명 { //기능 정의 } 프로토콜을 채택하려면 사용자 정의 타입 뒤에 콜론을 붙이고 프로토콜명을 위치시킨다. 프로토콜이 여러개일 경우, 콤마로 나열할 수 있다. 클래스의 경우, 상속받은 superclass가 있다면 나열된 목록의 제일 앞에 위치시켜준다. struct 구조체명: 프.. 2022. 2. 13.
Swift) removeAll() vs [] 시간복잡도, 효율성을 따지다가 removeAll()과 []은 뭐가 다른건가 생각이 들었다. !!!!!!!!!!!!!!!!!!!! 근데 보면 default가 false이다. 만약 keepingCapacity로 true를 넘겨준다면 요소는 제거하지만, 메모리는 제거하지 않는다. 내 생각엔 이것 같다. true를 넘겨줘 메모리를 남겨둔다면 complexity가 O(n)인 것이고, 기본값 false이면 아닌 것 아니 아무리 생각해봐도 그냥 가차없이 다 지워버리는건데 차례대로 지우는 것도 아니고 검색을 하는 것도 아니고.. 그래서 의문을 가졌었다. 내가 내린 결론은 []를 저장해 빈 배열로 만들던, removeAll()을 쓰던 상관이 없다. 이다. 궁금한 분이 계시다면 밑글을 한번 읽어보는 것도 좋을 것 같다. .. 2022. 2. 13.