일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 원격 푸시
- CoreLocation
- AppTransportSecurity
- tableViewCell
- OperationQueue
- RunLoop
- Understanding Swift Performance
- ios
- Choosing Between Structures and Classes
- for-in
- 연산 프로퍼티
- SWiFT
- uikit
- 진입점
- weak
- 트레일링 클로저
- IBOutletCollection
- entrypoint
- IBOutlet
- WWDC16
- UIButton
- userdefaults
- firebase
- DispatchQueue
- 후행 클로저
- Remot Push
- property wrapper
- TableView
- viewcontroller
- 동시성프로그래밍
- Today
- Total
목록분류 전체보기 (72)
iOS 공부하는 감자
CollectionView란 iOS 프로그래밍에서 가장 핵심적인 UI 구성 방법이다. 기본적으로 UIScrollView를 상속하여 스크롤 기능이 내장되어 있으며, 여러 데이터를 보여주기 효과적이다. CollectionView가 데이터를 표현하는 방식 Width의 값이 디바이스의 너비로 고정되는 TableView와 다르게, CollectionView는 Layout을 잡기 위해 각 아이템의 width, height 정보가 모두 필요하다. CollectionView에는 정확한 Layout을 설정하기 위해 Layout을 전문적으로 설정하는 객체가 있다. 둘 다 UICollectionViewLayout을 상속받은 클래스이다. FlowLayout : 전통적으로 사용하던 방식 CompositionalLayout : ..
ATS란 애플리케이션과 웹 서비스 사이에 통신에서 보안 향상을 위해 iOS 9.0부터 도입된 보안 정책으로, 보안이 취약한 네트워크를 차단하고, 모든 인터넷 통신 시 안전한 프로토콜을 사용하는 것을 보장한다. 프로젝트를 생성하면 자동 적용되며, 암호화 처리되지 않는 HTTP를 사용하여 네트워크 통신을 시도하면 아래와 같은 에러 로그를 띄우며 통신이 실패한다. (+ ImageURL을 사용하여 이미지를 불러올 때, URL 주소가 HTTPS가 아니라면 이미지를 불러올 수 없다.) "App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Use HTTPS instead or add Except..
Property Wrapper란 Swift 5.1에서 추가된 기능으로, 해석 그대로 프로퍼티를 한번 감싸는 것을 의미한다. Property Wrapper를 사용하면 프로퍼티가 저장되는 방식을 관리하는 코드와 프로퍼티를 정의하는 코드 사이에 분리 계층을 추가하여 프로퍼티를 관리할 수 있다. 만약 특정 문자열 프로퍼티의 값을 대문자로만 사용하고 싶을 때, Property Wrapper를 사용하지 않고 연산 프로퍼티로 구현하면 아래와 같이 코드를 작성할 수 있다. struct Person { private var _name: String // name에 값이 할당되면 _name에 그대로 저장하고 // 값을 반환할 때는 _name에서 uppercased()메서드를 호출한 후 반환한다. var name: Stri..
1. forEach VS for-in 둘 다 Collection에 들어있는 요소를 순환하며 처리하고자 할 때 사용한다. 사실 지금까지.. 동작 구조에 대한 이해 없이, 단순 작성이 편하다는 이유로 forEach문을 자주 사용했었다..!! @IBOutlet var labelList: [UILabel]! labelList.forEach({ ... }) 이런 식으로 IBOutletCollection 배열을 forEach문으로 순환하면서 필요한 작업을 했었는데, 멘토님께서 구조적인 차이를 알고 사용하면 좋을 것 같다고 하셨다.! (보통 편해서 forEach문을 사용하는 경우가 많아서 차이점을 찾아보는 것을 권장해 주셨다.) for-in let someCollection: [Int] = [1, 2, 3, 4, 5..
UserDefaults란? iOS 앱에서 데이터를 영구적으로 보관하기 위해서는 다음과 같은 다양한 방법이 있다. 서버 CoreData UserDefaults KeyChain 그중 UserDefaults는 앱이 실행되는 동안(런타임) Key-Value 형태로 데이터를 저장하는 사용자의 기본 데이터베이스에 대한 인터페이스다. UserDefaults에 저장된 데이터는 앱이 종료되더라도 사라지지 않고, 영구적으로 저장된다. 단, UserDefaults의 데이터는 앱 Sandbox에 저장되므로 앱 자체가 삭제된다면 데이터도 같이 사라진다. 따라서 앱의 삭제 유무와 관계없이 데이터를 저장하기 위해서는 앱 내에서 백업/복구 기능을 지원하거나 KeyChain, iCloud 동기화 등의 기능을 추가하여 데이터를 유지시키..
Sandbox는 운영체제의 커널 수준에서 시행되는 접근 제어 기술로 외부로부터 들어온 프로그램이 보호된 영역에서 동작하도록 하여 시스템이 부정하게 동작되는 것을 막는 보안 형태이다. iOS의 각 앱은 설치될 때 앱마다 Sandbox라는 공간을 생성하여 내부에 앱 작동을 위해 필요한 데이터를 저장하고 , 서로 공유되지 않도록 한다. 외부의 공격으로 앱이 손상되어도 앱이 필요한 작업을 수행하는데 필요한 최소한의 권한으로 제한되어 있어 손상 범위를 줄여준다. 커널 : 메모리에 상주하는 운영체제의 한 부분으로 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 핵심 기능을 모아놓은 것을 말한다. Sandbox 처리되지 않은 앱에서는 ... 1) 해당 앱을 실행하는 사용자에 대한 모든 권한을 가지며, 사용자가 엑..
라이브러리 필요한 기능이 있는 코드의 묶음으로, 효율적인 코드 작성을 위해 필요한 곳에서 호출하여 사용할 수 있도록 Class나 Function으로 만들어져 있다. 프로그래밍의 전체적인 흐름 규칙을 따라야하는 프레임워크와 다르게 라이브러리는 개발자가 원할 때 필요에 따라 사용하고 직접 코드를 제어할 수 있다는 차이가 있다. 보통 Github에서 유용한 오픈소스 라이브러리들을 많이 찾을 수 있는데, 구글에 "github swift TextField(기능이 필요한 요소)" 키워드로 검색하면 좋은 자료들이 많이 나온다.! 유용하고, 안정적인 라이브러리를 찾는 방법 1) 대기업 앱의 "오픈소스 라이선스" 리스트를 참고한다. 굵직한(?) 대기업들의 앱에서는 설정창에서 "오픈소스 라이선스"라는곳을 확인할 수 있는데..
iOS에서 생명주기란 앱의 최초 실행과 종료 사이에 발생하는 일련의 이벤트로 구성된다.내부 메커니즘에 의해 각 이벤트 시점마다 함수들이 자동으로 호출되며, 개발자는 각 시점에 필요한 기능을 재정의하여 구현하면 된다. Life Cycle은 크게 두 종류로 구분된다.앱 생명주기ViewController 생명주기 앱 생명주기앱 생명주기는 앱의 전반적인 실행과 종료에 관련된 생명주기를 말한다.(앱이 실행되고, 백그라운드도 진입하고, 다시 실행되고, 종료되는 등의 주기..) iOS 13 발표 전까지는 왼쪽의 사진처럼 AppDelegate에서 앱 생명주기(앱의 실행과 종료)와 UI 요소의 생명주기 (백그라운드 상태 로직 등)을 모두 처리했었지만발표 이후 오른쪽 사진처럼 AppDelegate에 추가로 SceneD..
0) 깃 계정 연동 Xcode -> Preferences -> Accounts 경로로 들어가서 좌측하단 "+"를 통해 GitHub 계정을 연결한다. 1) 깃 저장소 생성하기 프로젝트를 생성할 때 "Create Git repository on my Mac"을 체크해서 깃 저장소를 같이 생성할 수 있다. 프로젝트를 생성할 때 깃 저장소를 생성하지 않았다면 Source Control -> New Git Repositories.. 에서 추가할 수 있다. 2) 변경사항 커밋하기 아래 경로로 들어가면.. 스테이징된(변화가 생긴) 파일들을 확인할 수 있고, 커밋할 파일만 체크박스로 선택할 수 있다. 하단에 커밋 메시지를 작성한다. 3) 원격 저장소 생성 & 연결 2번까지 완료하면 로컬 저장소에서 Git을 통해 버전 ..
스토리보드에서 작업한 UI객체를 코드에 연결하기 위해서는 IBOutlet 또는 IBAction을 사용하여 연결해야 한다. IB는 Interface Builder의 줄임말입니다. 스토리보드에서 control + 드래그를 사용하여 코드에 연결하면 Default값은 Weak가 설정되어 있음을 확인할 수 있는데.. Strong을 사용하여 연결하면 안되는가?? 에 대한 궁금증을 해결하기 위해 정보를 찾아보았다..!! UI 요소들의 참조 구조(?) 우선, ViewController가 메모리에 올라왔을 때 내부적으로 어떻게 참조(Reference)가 발생하고 있는지에 대한 이해가 필요하다. ViewController가 Heap메모리에 올라온 상황을 글쓴이가 앞발로 그려보았다. 위쪽은 IBOutlet을 연결할 때, S..