NSObjcet 음.. SwiftUI에선?
·
iOS
흠..이거 관련된건 개발쪽인가 면접준비쪽인가..면접에서 안물어볼거같긴한데. both인가뭐 우리가 UIKit으로 개발을 하다보면 NSObject를 상속해야하는 경우를 많이 만날 수 있다. 없으면 추가하라고 빨간 이슈가 뜬다. 대체 뭐길래??사실 이건 Objective-C의 잔해?라 하긴 그렇고 뭐라해야하지 어쨋거나 Objective-C관련된 것이다.NSObject는 Objective-C Runtime 시스템의 최상위 클래스로, 모든 Objective-C 및 Swift 클래스의 기반이 된다. Cocoa 및 Cocoa Touch 프레임워크의 루트 클래스로, 이 클래스를 상속받음으로써 런타임 시스템과 상호작용할 수 있는 기능을 포함하게 된다.NSObject를 상속받으면?• Objective-C 객체처럼 동작할 ..
명령형과 선언형, 그리고 FP까지
·
iOS
iOS 개발을 하다 보면 "UIKit은 명령형, SwiftUI는 선언형"이라는 말을 자주 듣게 되는데요. 처음엔 그냥 "아 그렇구나" 하고 넘어갔었는데, 실제로 둘 다 써보니까 왜 이런 구분이 필요한지 몸소 느끼게 되더라고요.특히 SwiftUI로 넘어오면서 코드가 훨씬 간결해지고 예측 가능해졌는데, 이게 단순히 새로운 문법 때문만은 아니라는 걸 깨달았어요. 프로그래밍 패러다임 자체가 다르기 때문이었거든요.그런데 여기서 한 가지 깨달은 게 있었어요. 선언형 프로그래밍의 본질은 단순히 "무엇을 원하는가"를 명시하는 게 아니라, "추상화 레벨을 높여서 복잡함을 숨기는 것"이더라고요.토스 팀의 아티클을 보면서 이 부분이 더 명확해졌는데, 결국 우리가 매일 쓰는 for...in 반복문도 선언형 코드라는 거예요.프..
SwiftUI runLoop
·
iOS
https://www.youtube.com/watch?v=MTGh9U2yHNMSwiftUI Run Loop란 무엇인가?SwiftUI에서 UI 업데이트가 어떻게 이루어지는지 궁금해하신 적 있나요? 🤔SwiftUI는 내부적으로 Run Loop라는 시스템을 통해 UI 업데이트를 관리합니다. 이 Run Loop는 Swift 5.5부터 Main Actor 위에서 동작하며, 다음과 같은 역할을 수행합니다:사용자 이벤트 수신 (터치, 스와이프 등)모델 업데이트 허용SwiftUI 뷰를 화면에 렌더링이 과정을 "Run Loop의 틱(tick)"이라고 부르는데, 왜 이런 용어를 쓰는 걸까요? 마치 시계가 째깍째깍 소리를 내듯이, SwiftUI도 주기적으로 상태를 확인하고 UI를 업데이트하기 때문입니다! @Publishe..
MemoryLeak을 찾아보자(강한참조순환인가?) - 실전편2
·
SWIFT개발일지
나의 앱 볼레또는 여행 날짜가 되면 CLMointior인스턴스에 해당하는 지역의 위도 경도를 넣어 모너터링을 키고 유저가 해당 지역에 가면 푸쉬 알람을 보내주는 기능이 핵심이다. 이전에는 모니터링 이외의 메모리 릭을 살펴봤는데 이번에는 모니터링에서 발생하는 Memory Leak을 살펴볼 예정이다.저번에 했던 Memory  debugger Graph를 다시 열어보자. 막 거미줄마냥 엮여있다.총 16개로 저번에 1개 고치는데에도 하루종일 사용했는데 이번엔 얼마나 걸릴지 막막하다. 나의 과거를 욕해야지..일단 이번에는 Command Line Tool사용하여 더 살펴보려 한다. 메모리 그래프 디버거 킨 상태에서 File > Export Memory Graph를 선택하여 스냅샷을 파일로 저장하고 해당하는 것을vm..
Memory Leak을 찾아보자 실전편(1)
·
SWIFT개발일지
앱이 가끔 튕기는 현상을 발견했습니다. 메모리 릭이 원인일 가능성이 높다고 판단해서 본격적인 디버깅에 들어갔어요.먼저 Edit Scheme에서 두 가지 중요한 옵션을 활성화했습니다:Malloc Scribble (메모리 오버라이드 감지)Malloc Scribble은 동적 메모리 할당 시 메모리를 더미값으로 초기화하고, 해제 전까지 해당 메모리 공간에 예상치 못한 쓰기 작업이 발생하는지 감지하는 디버깅 기능입니다 이를 통해 초기화되지 않은 메모리에 접근하거나, 이미 해제된 메모리를 사용하는 문제를 파악할 수 있다.할당 시: 0xAA로 초기화해제 시: 0x55로 덮어쓰기메모리에 접근할 때 이 값을 확인해서 예상하지 못한 읽기/쓰기 작업을 감지해요어떤 문제들을 잡아낼 수 있을까요?• Dangling Pointe..
메모리관리(weak self와 guard의 만남)
·
iOS
강한 참조 순환 vs 지연된 할당 해제처음에 저는 [weak self]를 언제 써야 하는지 정말 헷갈렸어요. "그냥 항상 쓰면 되는 거 아닌가?" 싶었는데, 알고 보니 두 가지 서로 다른 문제를 해결하는 거더라고요.1. 강한 참조 순환 (Strong Reference Cycle)원인: 두 객체가 서로를 강하게 참조해서 순환 고리가 형성됨결과: 메모리 누수 - 객체가 영원히 해제되지 않음 💥해결책: weak 또는 unowned 참조 사용2. 지연된 할당 해제 (Delayed Deallocation)원인: 객체가 클로저에 의해 강하게 참조되고, 클로저 실행이 지연됨결과: 객체의 메모리 해제가 지연되지만, 결국에는 해제됨부작용: 불필요하게 메모리를 오래 점유하거나, 해제된 후에도 작업이 계속될 수 있음가장 ..
Hash-Hashable을 곁들인
·
iOS
사실 이건 기본중의 기본이다. 이미 알고리즘을 풀며도 사용하고 개발을 할때도 이미 많은 곳에 포함되어있다. 하지만 내 블로그에는 따로 정리를 해놓은 적이 없어 딥다이브로 파고들 생각이다. 자 들어가자해쉬🌞Hashing은 임의의 각각 크기를 가진 입력 데이터를 고정 크기의 값으로 변환하는 과정으로, 이를 해시 함수(Hash Function)가 담당한다. 이 과정에서 생성된 출력값은 해시 값(Hash Value) 또는 해시 코드(Hash Code)라고 한다원본 데이터인 키값을 저 hash function을 통해 64 bit의 int형으로 변환한 것을 확인 할 수 있다. 일반 적으로 키 값이 동일하면 해쉬결과값도 동일하게 나온다. Hash Function를 통해 어떠한 값이 들어오건 정해진 자료내의 결과값으..
마케팅 앱스토어 노출하기
·
Design
https://developer.apple.com/kr/videos/play/tech-talks/110358/ 앱 노출 및 마케팅 시작하기 - Tech Talks - 비디오 - Apple DeveloperApp Store에서 앱의 노출을 향상시키는 방법에 대해 알아보십시오. 사용자가 App Store에서 앱을 발견하는 다양한 경로를 살펴보고 앱의 노출도를 높일 수 있는 방법을 알려드립니다. 최고의 제품 페developer.apple.comhttps://apps.apple.com/kr/app/%EB%B3%BC%EB%A0%88%EB%98%90/id6737753864 ‎볼레또‎1. 티켓으로 꾸미는 특별한 여행 기록 - 일반적인 일기 형식이 아닌, 티켓을 형상화한 독특한 기록 방식을 제공합니다. 티켓에는 출발지..
22968-균형(swift풀이)
·
알고리즘
https://www.acmicpc.net/problem/22968문제를 해석하는게 어려웠다. 그래서 나와같은 어려움이 있는 사람들을 위해 정리하자면..정점의 개수가 주어질때 해당 정점으로 만들수 있는 AVL Tree의 최대 높이를 구하자는 것이다. AVL Tree = 왼쪽과 오른쪽 노드의 층 차이가 1층보다 크면 안됨. 결국 같은 층이거나 1층차이이여만 한다. 맨 오른쪽의 예제를 보면 1과 10이 2층차이난다. 그냥 이렇게 해석하면 끝!딱 보자마자 아 이거 규칙이 있겟구나 생각을 하며 점을 찍어보았다.1로 그래프를 찍었을때 딱 저 부분이 킥이다. 저 1이 생기는 순간 한층을 더 아래로 내릴 수 있다. 왜냐? 1층차이니까!! 완전이진트리가 될 필요가 없다.그러므로 조금 더 규칙을 구하기 위해 경우를 좀 ..