ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 210514 - TIL
    TIL/2021 2021. 5. 14. 23:05

    SceneDelegate, AppDelegate

     

    ViewController안에 timer라는 속성을 넣기보다 TimerManager라는 객체를 만들고 이 친구와 메시지를 주고받으며 구현해볼까??라는 생각에 Timer를 다시 만드는데 시간을 기록하기위해서는 앱이 Background에 있어도 시간이 기록되어야 했다.

    그래서 어떻게 해야 할까 검색하던 중 SceneDelegate에서 해주면 된다는 것을 알고 코드를 작성하는데 문득 이 둘의 차이가 뭐지?? 라고 생각해보니 딱히 답할 수 없어서 공부를 했다.

    기존에 사용하던 방식은 SceneDelegate는 iOS 13.0부터 생긴 개념이라 13.0 버전 이하에서 앱을 만들려면 SceneDelegate class 자체를 @available(iOS 13.0, *) 해주고 AppDelegate에서 제일 아래에 있는 application(_:configurationForConnecting:) application(_:didDiscardSceneSessions:) 두 메서드에도 @available(iOS 13.0, *) 해주고 window를 속성으로 넣어주는 거였는데

    공부를 하고 나니 왜 이렇게 하는지 알게 됐다.

     

    iOS 12.0 이전에 App Delegate

     

    iOS 13.0 부터 바뀐 부분

     

    • iOS 13.0부터부터 하나의 프로세스를 공유하지만 여러개의 UserInterface instances or scene sessions 가지게 됐다.
    • AppDelegate UI LifeCycle 책임은 없어지게됐다.
    • 추가적으로 AppDelegate에 Session LifeCycle에 관한 책임을 가지게 됐다.

    자세한 내용은 WWDC2019에서 Apple presentation을 보면 잘 설명해준다.

    https://developer.apple.com/videos/play/wwdc2019/258/?time=349 

     

    Architecting Your App for Multiple Windows - WWDC 2019 - Videos - Apple Developer

    Dive into the details about what it means to support multitasking in iOS 13. Understand how previous best practices fit together with new...

    developer.apple.com

     

    Background에 있어도 시간이 기록돼야 하는 문제는 각각 제공하는 Method에서 background로 변할 때 시간을 Notification에 userInfo에 저장하고 foreground에 진입할 때 시간에서 이전 시간을 빼서 timeInterval을 더해주는 방식을 사용했다.

     


     

    Button Image 바꾸기

     

    쉽게 View에 ImageView를 넣고 button으로 감싼 뒤 ImageView.image를 바꾸면 되지만 button만 있을 때 button의 이미지를 바꾸고 싶었는데 Button.imageView?.image를 바꾸려 하니 바뀌지 않았다.

     

    이렇게 setImage(_:for:_) 메서드를 이용하여 변경하면 된다.

    간단간단!

     


     

    Swift

    오늘은 Loop, Control Transfer에 대해서 복습했다.

    Labeled statement를 사용할 기회가 없어서 어디에 선언해야 하는지를 까먹었는데 이 기회에 다시 알고 간다!

     

    Loop Statement

    • for - in
      • Loop Constant
    • while
    • repeat while

     

    Control Transfer

    • continue
    • break
    • fallthrough
    • throw
    • return
    • Labeled Statement
      • label을 어디서 선언해줘야 하나?
      • Label: statment 이렇게 선언

     


    Computer Architecture

    계속되는 컴퓨터 구조 공부

    MIPS CPU가 어떻게 동작하고 성능 향상을 위한 디자인을 어떻게 해야 할지에 대해서 공부했다.

    그리고 2진수 16진수에 대해서 복습했다.

     

    Instruction

    • 명령어
    • Instruction set
      • The repertorie of instructions of a computer
    • Instruction Set Architecture(ISA)
      • The abstract interface between the HW, and the loswest level SW
      • Instructions 정보를 담아 하드웨어에게 준다고 생각하면 된다.
    • Application Binary Interface (ABI)
      • ISA + OS
      • ABI가 같다면 같은 프로그램은 다른 컴퓨터에서 똑같이 실행될 수 있다.
        • 예로 인텔(ISA) cpu 사용하고 윈도우 (OS) 사용하면 워드 프로그램을 어느 컴퓨터에서든 실행 가능하다.

    MIPS

    • CPU 중에 하나를 의미하기도 한다.
    • 아래에 사용된 예시를 MIPS로 들기로 한다.

     

    Operation

    • Arithmetic Operation
      • add a, b, c => a gets b + c
    • Design Principle1: Simplicity favours regularity
      • Regularity makes implementation simpler
      • 규칙은 구현을 간단하게 만든다라는 의미
    • Design Principle2: Smaller is faster
      • 작을수록 빠르다
    • Design Principle3: Make the common case fast
      • 자주 사용하는것을 빠르게 만들자
    • Design Principle4: Good design demands good compromises

     

    • Register Operands
      • 산술 연산은 register operands를 사용한다.
      • $t0, $t1 …. Temporary value
      • $s0, $s1 … Saved variables
    • Memory Operands
      • To apply arithmetic operations
        • 메모리의 값을 register로 로드해야 한다.
        • register 저장된 값을 메모리에 저장시킨다.
      • lw 명령어 == load word (word는 4 byte를 의미)
      • sw == store word
      • 메모리에서 가져온다는
    • Register vs Memory
      • 메모리보다 레지스터가 더 빠르다.
      • MIPS는 Load - Store Architecture
        • 메모리에 직접 값을 가져오지 못하고 레지스터를 통해서 load store 해야한다.
    • Immediate Operands
      • 레지스터 + 레지스터가 아닌 레지스터 + 상수와 같이 상수를 사용하게 된다.
      • 레지스터를 사용하지 않고 상수를 사용하니 load instruction을 사용하지 않아서 더 빨라지게 된다.
      • 예를 들어 복사를 하려면 add $t2, $s1, zero 같이 이미 정해놓은 상수를 사용

     

    • Logical Operation
    • Conditional Operations

     

    Unsigned Binary Intergers

    부호가 없는 정수

    Signed는 2s-Complement를 사용하게 된다. (2의 보수 방식)

    Sign Extension

    • 부호가 sign bit에 의해 결정되므로 1byte -> 2byte로 확장될 때 수를 표현하는 방식
    • Unsigned라면 0으로 채우면 되고
    • Signed라면 sign bit로 채우면 된다.

    Hexadeciaml

    • 16진수
    • 0 ~ 9 a ~ f

     


     

     

    728x90

    'TIL > 2021' 카테고리의 다른 글

    210519 - TIL  (0) 2021.05.20
    210518 - TIL  (0) 2021.05.19
    210513 - TIL  (0) 2021.05.14
    210512 - TIL  (0) 2021.05.13
    210509 - TIL  (0) 2021.05.10
Designed by Tistory.