26~27일차 수업 내용을 정리한 글입니다.
Learned
xib (Xcode Interface Builder) 와 nib
1) 개요
- nib은 인터페이스 빌더로 설정한 UI 객체의 속성, 레이아웃 등의 정보가 담겨있는 바이너리 파일을 말함.
- nib 파일을 xml 형식으로 변환한 파일이 xib이다.
실제로 xib 파일을 소스 코드로 확인하면 설정한 값들이 여러 태그로 구조화돼있다. - xib는 컴파일러가 이해할 수 없는 형식이므로 컴파일 과정에서 xib 파일이 다시 nib 파일로 변환됨.
- UIViewController, UITableViewCell, UICollectionViewCell 클래스의 경우
nib파일을 사용해 객체를 생성하는 메서드가 존재함. - 하나의 nib 파일에 여러 개의 객체(top-level objects)를 담을 수 있다.
2) nib 파일로 객체 초기화
- UI 객체를 생성할 때 초기화 방식은 인터페이스 빌더 방식과 코드 방식이 서로 다르다.
- 인터페이스 빌더로 구성한 UI 객체는 init?(coder: NSCoder)에서 초기화됨.
- 따라서 객체를 초기화 시점에 커스텀하려면 위 초기자에서 실행해야 함.
- required가 붙은 초기자는 프로토콜에 명세돼있는 초기자이므로 반드시 구현해야함.
3) nib 파일 로드하기
- Bundle.main.loadNibName
- 특정 이름을 가진 nib 파일에서 top-level objects를 로드(인스턴스화)하는 메서드
- Files Owner는 nib 파일의 top-level objects에 대한 참조를 유지하는 객체.
- UINib(nibName:bundle:)
- 특정 이름을 가진 nib 파일로부터 UINib 객체를 생성함.
- instantiate 메서드를 통해 nib 파일을 Unarchiving
@IBInspectable 과 @IBDesignable
1) @IBInspectable
- 특정 프로퍼티의 값을 인터페이스 빌더의 인스펙터 영역에서 설정할 수 있게 해주는 Attribute
- 특정 타입의 프로퍼티에만 적용할 수 있다. ex) 컬러, 이미지, 문자열, 숫자 등
2) @IBDesignable
- 컴파일 타임에 인터페이스 빌더로 설정한 값이 적용된 모습을 확인할 수 있음.
(실시간 렌더링) - 오류로 동작하지 않을 수도 있음.
@IBDesignable class CustomButton: UIButton {
@IBInspectable
var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
}
}
@IBInspectable var borderWidth: CGFloat {
get {layer.borderWidth}
set {layer.borderWidth = newValue}
}
@IBInspectable var borderColor: UIColor {
get { UIColor(cgColor: layer.borderColor!)}
set { layer.borderColor = newValue.cgColor }
}
}
기타
- 프로퍼티 리스트(plist)로 API Key를 관리하는 방법이 존재함.
- URLSession은 자체적으로 request 클로저를 비동기로 처리함.
- URLSession을 사용하는 Alamofire는 response 클로저를
기본적으로 메인 스레드에서 처리함.
흥미로운 아티클
https://dev.to/ingun37/uiview-file-s-owner-2a20
'TIL' 카테고리의 다른 글
[Sesac IOS] 29일차 TIL (0) | 2022.08.12 |
---|---|
[Sesac IOS] 28일차 TIL (0) | 2022.08.11 |
[Sesac IOS] 25일차 TIL (0) | 2022.08.07 |
[Sesac IOS] 24일차 TIL (0) | 2022.08.05 |
[Sesac IOS] 23일차 TIL (0) | 2022.08.04 |