Bounds 와 Frame, 실제 디바이스가 없을 경우 개발 환경에서 할 수 있는 것과 없는 것, struct와 class와 enum

Groot·2022년 10월 14일
0

TIL

목록 보기
86/148
post-thumbnail

TIL

🌱 난 오늘 무엇을 공부했을까?

📌 면접스터디

📍 Bounds 와 Frame 의 차이점을 설명하시오.

  • View의 위치와 크기

🔗 Frame

  • 상위 뷰의 좌표계에서 뷰의 위치와 크기를 설명하는 프레임 사각형.
  • 프레임 사각형을 변경하면 draw(_:) 메서드를 호출하지 않고 뷰가 자동으로 다시 표시

🔗 Bounds

  • 자체 좌표계에서 뷰의 위치와 크기를 설명하는 경계 사각형.
  • 변경하면 draw(_:) 메서드를 호출하지 않고 뷰가 자동으로 다시 표시

🔗 차이점






  • Frame은 상위 뷰에서 뷰의 위치와 관련되기 때문에 너비를 변경하거나 뷰와 상위 뷰의 상단 사이의 거리를 찾는 것과 같이 외부 변경을 수행할 때 Frame을 사용합니다.
    • UIView의 위치 및 크기를 설정할 때 사용한다

  • 사물을 그리거나 뷰 내에서 하위 뷰를 정렬하는 것과 같이 내부 변경을 수행할 때 Bounds를 사용합니다. 또한 변환을 수행한 경우 때 Bounds를 사용하여 뷰의 크기를 가져옵니다.
    • View를 회전(transfomation)한 후 View의 실제 크기를 알고 싶을 때 사용한다
    • ScrollView에서 스크롤을 할 때 사용된다
      • contentOffset : 콘텐츠 보기의 원점이 스크롤 보기의 원점에서 오프셋되는 지점입니다. -> ScrollView의 bounds 설정

🔗 질문이유

  • iOS에서 View 좌표계에 대한 이해를 얼마나 하고있는지에 대해 알아보기 위해서

🔗 꼬리질문

  • 그려서 설명해보기
  • clipsToBounds: 하위 뷰가 뷰의 경계로 제한되는지 여부를 결정하는 부울 값입니다.

📍 실제 디바이스가 없을 경우 개발 환경에서 할 수 있는 것과 없는 것을 설명하시오.

🔗 일반적인 차이점

  • 정확한 결과를 얻으려면 처리, 그래픽 및 네트워킹에 대한 성능 테스트를 물리적 장치에서 수행해야 합니다.

    • 시뮬레이터는 CPU, 메모리 및 네트워크 연결을 포함한 컴퓨터 리소스를 사용하여 Mac에서 실행되는 앱입니다. 결과적으로 시뮬레이터는 앱의 성능, 메모리 사용량 및 네트워킹 속도에 대한 정확한 테스트가 아닙니다. 시뮬레이터의 성능 테스트 결과는 앱 기능의 상대적인 차이에만 사용할 수 있습니다.
  • 실제 결과가 필요한 경우 물리적 장치에서 사용자 테스트를 수행해야 합니다.

    • 포인터 및 키보드와의 사용자 상호 작용은 iOS 및 watchOS에서 손가락을 사용하거나 tvOS에서 사용되는 포커스 기반 모델과 다릅니다.

🔗 디스플레이 차이

  • 장치와 Mac의 해상도 또는 포인트당 픽셀은 다를 수 있습니다. 이로 인해 특히 작은 텍스트의 경우 텍스트와 이미지가 들쭉날쭉하게 나타납니다.
    • 시뮬레이터 창의 크기를 늘리면 텍스트와 이미지가 더 선명하게 나타날 수 있습니다.
  • Mac 화면의 색 영역은 다를 수 있어 색상이 정확하지 않을 수 있습니다.

🔗 시스템 차이점

  • 시뮬레이터는 iOS 11 이상, tvOS 11 이상, watchOS 4 이상에서 백그라운드 앱과 프로세스를 일시 중단하지만 일시 중단된 프로세스는 디버거에서 재개할 수 있습니다.
  • 시뮬레이터는 HFS+ 및 APFS 형식 볼륨에서 파일 시스템을 대소문자를 구분합니다.

🔗 하드웨어 차이점

  • 다음 하드웨어는 시뮬레이터에서 지원되지 않습니다.
    • 주변 광 센서
    • 오디오 입력(하드웨어 -> Siri를 선택하여 Siri를 사용하는 경우를 제외하고)
    • 기압계
    • 블루투스
    • 카메라
    • 모션 지원(가속도계 및 자이로스코프)
    • 근접 센서

🔗 API 차이점

  • 다음 프레임워크는 시뮬레이터에서 지원되지 않습니다.
    • ARKit
      • iOS 기기 카메라와 모션 기능을 통합하여 앱이나 게임에서 증강 현실 기능.
    • External Accessory
      • Apple Lightning 커넥터 또는 Bluetooth 무선 기술을 사용하여 장치에 연결하는 액세서리와 통신하는 기능.
    • HomeKit
      • 홈 자동화 액세서리를 구성, 제어 및 통신 기능.
    • IOSurface
      • 여러 프로세스에서 하드웨어 가속 버퍼 데이터(프레임 버퍼 및 텍스처)를 공유기능. 이미지 메모리를 보다 효율적으로 관리합니다.
    • Media Player
      • 앱 내에서 노래, 오디오 팟캐스트, 오디오북 등을 찾고 재생합니다.
    • Message UI
      • 이메일과 문자 메시지를 작성하기 위한 사용자 인터페이스를 만들어 사용자가 앱을 떠나지 않고도 메시지를 편집하고 보낼 수 있습니다.
  • 시뮬레이터에서는 다음 API 기능을 사용할 수 없습니다.
    • Apple 푸시 알림 수신 및 전송.
      • Xcode 11.4부터 시뮬레이터에서 Remote Push Notification의 시뮬레이션을 지원
    • UIBackgroundModes Key??
      • 백그라운드에서 실행해야 하는 앱에서 제공하는 서비스
    • UIKit의 UIVideoEditorController클래스.
      • 비디오 프레임을 트리밍하고 이전에 녹화된 동영상을 인코딩하기 위한 시스템 인터페이스를 관리하는 뷰 컨트롤러
    • Support for Handoff.
      • Handoff를 사용하면 한 장치에서 작업을 시작한 다음 근처에 있는 다른 장치로 전환하여 중단한 부분부터 계속할 수 있습니다.

🔗 OpenGL ES 차이점

  • 시뮬레이터에는 앱 개발을 시작하는 데 사용할 수 있는 OpenGL ES 1.1, 2.0 및 3.0의 완전한 구현이 포함되어 있습니다. 시뮬레이터의 기능은 A7 GPU의 기능과 유사합니다. 시뮬레이터는 다음과 같은 몇 가지 면에서 하드웨어 프로세서와 다릅니다.
    • 시뮬레이터는 타일 기반 지연 렌더러를 사용하지 않습니다.
    • 시뮬레이터는 그래픽 하드웨어에 픽셀 단위로 정확한 일치를 제공하지 않습니다.

      중요: 시뮬레이터의 OpenGL ES 지원은 OpenGL ES 앱 작성을 시작하는 데 도움이 되도록 사용해야 합니다. 시뮬레이터가 iOS 장치에 사용되는 그래픽 프로세서의 정확한 성능이나 실제 성능을 반영한다고 가정하지 마십시오. 항상 실제 장치에서 도면 코드를 프로파일링하고 최적화하십시오.

🔗 질문이유

  • 실제 앱을 개발하고 다양한 테스트를 해본 경험이 있는지? or 앱을 테스트 할 때 미리 알아두어야 하는 부분이라고 생각이 들어서

🔗 꼬리질문

  • 하드웨어 테스트가 꼭 필요한 앱 3가지 말해보기
    - 필터 카메라 앱
    - 음성인식 앱
    - 맥이나 아이패드에서 연속적으로 사용이 가능한 앱(핸드오프 기능)
    iOS Simulator 도움말

📍 struct와 class와 enum의 차이를 설명하시오.

  • 일반적인 지침으로, 추론하기 쉽기 때문에 구조체를 선호하고 적절하거나 필요할 때 클래스를 사용합니다.
  • 실제로 이것은 정의하는 대부분의 사용자 정의 데이터 유형이 구조체 및 열거형이 될 것임을 의미합니다.

🔗 struct

  • thread-safe
  • immutable
  • 모든 구조체에는 자동으로 생성된 멤버별 이니셜라이저가 있다
  • 값 유형은 변수나 상수에 할당되거나 함수에 전달될 때 값이 복사되는 유형입니다.
  • Swift의 모든 기본 유형(정수, 부동 소수점 숫자, 부울, 문자열, 배열 및 사전)은 값 유형이며 배후에서 구조체로 구현됩니다.
  • 모든 구조체와 열거형은 Swift의 값 유형입니다. 즉, 생성한 모든 구조체 및 열거형 인스턴스와 속성으로 포함된 모든 값 유형은 코드에서 전달될 때 항상 복사됩니다.
  • "copy on write"

🔗 class

  • 클래스는 참조 유형
  • 값 유형과 달리 참조 유형은 변수나 상수에 할당되거나 함수에 전달될 때 복사되지 않습니다.
  • 복사본 대신 동일한 기존 인스턴스에 대한 참조가 사용됩니다.
  • 상속
  • 유형 캐스팅을 사용하면 런타임에 클래스 인스턴스의 유형을 확인하고 해석
  • Deinitializers는 클래스의 인스턴스가 할당된 리소스를 해제
  • 참조 카운팅
  • 구조체와 달리 클래스 인스턴스는 기본 멤버별 이니셜라이저를 받지 않습니다.
  • 클래스는 참조 유형이기 때문에 여러 상수와 변수가 뒤에서 클래스의 동일한 단일 인스턴스를 참조할 수 있습니다.
  • 두 개의 상수 또는 변수가 클래스의 정확히 동일한 인스턴스를 참조하는지 여부를 찾는 것이 때때로 유용할 수 있습니다. 이를 가능하게 하기 위해 Swift는 두 개의 ID 연산자를 제공합니다.
    • Identical to (===)
    • Not identical to (!==)

🔗 Enumerations

  • 종류를 구분하거나 연관된 값들을 하나의 그룹으로 만들어 사용할 때 enum을 사용
  • immutable
  • Stored properties 사용불가
  • "copy on write"
  • switch문을 이용해 case를 구분할 수 있다.

🔗 질문이유

  • 참조타입 값타입의 차이
  • 구조체와 클래스의 차이
  • 구조체와 열거형의 차이

🔗 꼬리질문

  • 왜 애플에서는 클래스를 가능하면 안쓰도록 할까
  • 구조체와 클래스간의 퍼포먼스에 대한 설명
profile
I Am Groot

0개의 댓글