기록하는 습관을 통해 성장하자.
- [iOS] NSOperationQueue와 GCD Queue의 차이점 NSOperationQueue와 GCD Queue의 차이점에 대해서 기록해보겠습니다. iOS에는 멀티스레딩을 할 수 있는 두 가지 방법이 있습니다. GCD(Grand Central Dispatch)는 C 기반의 low-level API이고 NSOperation은 Obj-C 기반으로 만들어진 high-level API가 있습니다. NSOperationQueue NSOperation 객체의 우선순위 및 준비 상태에 따라 대기열에 있는 객체를 실행한다. Operation Queue에 추가된 작업은 작업이 완료될 때까지 대기열에 남아 있다. 작업이 추가된 후에는 대기열에서 직접 제거할 수 없다. 모든 작업이 끝나지 않은 상태에서 Operation queue를 중지시키면 메모리 릭이 발생할 수 있다. GCD에서는.. 2021.01.29
- [Swift] 알고리즘에 필요한 Tip 정리 스위프트 알고리즘을 시작하면서 필요한 내용을 정리한 것을 올립니다! 시간 날 때마다 계속 추가할 예정..! 기본 입력 받기 (input의 타입은 String)var input = readLine()! Int형 한 개의 숫자 입력 받기var num = Int(readLine()!)! "1 2 3 4 5"와 같은 공백 있는 숫자 입력 받기// split - ReturnType: [SubString]var nums = readLine()!.split(separator: " ").map {Int($0)!}// components - ReturnType: [String]var nums = readLine()!.components(separatedBy: " "). map {Int($0)!} "12345"와 같은 공.. 2024.05.21
-
[iOS] 타사 SDK 요구 사항 변경 예정
Upcoming third-party SDK requirements24년 5월 1일부터 앱스토어 커넥트에 제출되는 앱은 privacy manifest 가 제공되지 않으면 리젝됨.타사 SDK는 개발자나 사용자도 모르게 개인정보 보안을 취약하게 만들 수 있음.
2024.03.22
- [iOS] WKWebView 정리 Swift WKWebView를 사용하면서 설정했던 것들을 기록합니다. WKWebView 특징 기존의 UIWebview를 대신하여 사용하며 iOS 9 이상의 버전을 필요로 합니다. 또한, 자바스크립트 엔진인 Nitro를 사용해서 UIWebView보다 성능이 더 좋습니다. 로컬로 저장된 파일에 대한 Ajax 요청을 지원하지 않습니다. 쿠키 허용 설정 및 고급 캐시 설정 지원을 하지 않고 앱 종료 시 HTML5 로컬 스토리지가 삭제됩니다. 기본 설정 import UIKit import WebKit class ViewController: UIViewController { var webView: WKWebView! override func loadView() { let webConfiguration = WKWebViewCo.. 2022.02.04
- [iOS] Firebase와 Google 로그인 연동하기 Firebase를 이용해서 구글 로그인을 구현하는 방법을 기록해보겠습니다. 아래의 그림을 보면서 먼저 동작 원리를 살펴보자면, 구글에 로그인을 하면 구글 토큰을 받게 되고 구글 사용자임을 증명하는 구글 토큰을 이용해서 파이어베이스 로그인을 시도합니다. 그리고 성공하게 되면 파이어베이스 토큰을 얻습니다. Firebase에서 프로젝트를 만들고 Xcode 프로젝트를 등록했다는 전제하에 시작하겠습니다. Podfile에 아래 두 줄을 추가하고 pod install로 설치해줍니다. pod 'Firebase/Auth' pod 'GoogleSignIn' 그리고 프로젝트에 복사해놨던 GoogleService-Info.plist의 RESERVED_CLIENT_ID를 복사해서 아래의 그림에서 URL Schemes에 붙여줍니.. 2021.02.02
- [Algorithm/Programmers] 가장 큰 정사각형 찾기 Swift 가장 큰 정사각형 찾기 Level2 문제 풀이: 이 문제는 처음에 완전탐색으로 접근했다가 푸는 방법을 모르겠어서 해설을 참고했다. Dynamic Programming을 이용해서 문제를 풀어야 한다. n이라고 써져 있는 1을 기점으로 박스친 곳에서 최소의 숫자를 구해서 n에 더해준다. 그런 식으로 값을 모두 구하면서 제일 큰 값을 구한다. 그리고 그 값의 제곱을 하면 넓이가 나오게 된다. 코드: import Foundation func solution(_ board:[[Int]]) -> Int { var board = board var result = 0 if board.count == 1 { return 1 } for i in 1.. 2021.01.14