Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 롤케이크 자르기
- SWIFT
- NavigationSearchBar
- class struct
- coremotion
- CarouselCollectionview
- 프로그래머스
- ReferceCycle
- 강한 참조 순환
- Array vs Linked List
- 면접을 위한 CS전공 지식 노트
- UserDefaults
- TableView Section
- tableview section별 다른 cell적용
- firebase
- Carousel CollectionView
- 테이블뷰 나누기
- 면접을 위한 CS 전공 지식 노트 Tree
- wil
- Reference Cycle
- Input Output
- til
- 양궁대회
- @escaping
- retain cycle
- CoreData
- TableView
- UIKit
- Value Type Reference Type
- 자료구조
Archives
- Today
- Total
개발하는 동글 :]
[TIL],[Swift],[Delegate의 Strong Reference Cycle] 본문
1. 문제 상황
개인과제를 진행하던 중 viewController가 deinit이 되지 않는 문제가 발생하였다.
무엇인가가 강한 참조순환이 되고 있어서 메모리에서 해제되지 않는 것이라고 판단하였다
그렇기에 처음으로 한 시도는 viewController을 사용하는 클로저에 모두 [weak self]를 붙이기 시작하였다.
그럼에도 viewController은 메모리에서 해제되지 않았기에 어떤 부분에서 강한 참조순환이 생기는지 찾기 시작하였다
2. 그래서 어디서 발생하는가?
class ToDoListCell: UITableViewCell {
var cellDelegate: ButtonTappedDelegate?
}
extension ToDoListViewController: UITableViewDelegate, UITableViewDataSource{
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = myTableview.dequeueReusableCell(withIdentifier: ToDoListCell.identifier ,for: indexPath) as? ToDoListCell else { return UITableViewCell() }
let tasks = Array(viewModel.getToDoList().reversed())
cell.cellDelegate = self
cell.bind(task: tasks[indexPath.row])
return cell
}
}
바로 이 부분에서 강한 참조 순환이 일어나고 있다.
이 부분의 관계를 그림으로 그려서 쉽게 이해해 보자.

그림과 같이 뷰 컨트롤러와 cell의 delegate가 서로를 강하게 참조하여 강한 참조순환이 일어나고 있었다.
3. 해결 방법
해결 방법은 기존의 강한 참조 순환 해결방법과 동일하다
뷰 컨트롤러를 강하게 참조하던 cellDelegate를 약한 참조로 수정해 주면
서로를 강하게 참조하고 있지 않기 때문에 강한 참조 순환을 해결할 수 있다.
weak var cellDelegate: ButtonTappedDelegate?

4. TIL
4.1오늘의 회고
1. 어제 발견하였던 메모리 누수의 문제점을 찾았고 그 부분을 해결해 보았다
2. 스터디 모비딕에서 진행하는 프로젝트의 UI를 구현
4.2 내일의 목표
1. Generics에 관한 부분을 공부하는 것을 하지 않았기에 조금 더 Generics의 활용과 다양한 문법을 공부해 보자.
2. 프로토콜과 Enum까지..!