TIL

[Sesac IOS] 26~27일차 TIL

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