👨‍🎓
Today I Learned
  • Today-I-Learend
  • 🍎WWDC
    • Developer Tools
      • Testing in Xcode
    • UIKit
      • UIDiffableDataSource
        • [WWDC 19] Advances in UI Data Sources
      • [WWDC2019] Advances in CollectionView Layout
  • 자료구조
    • Heap 자료구조
  • Clean code
    • 네이밍
    • 주석과 포맷팅
    • 함수
    • 클래스
    • 에러 핸들링
    • 가독성 높이기
    • 객체지향
  • Network
    • RestAPI
  • Swift
    • DateType
    • ARC
    • Availablity
    • KeyPath
    • Network
    • Never타입
    • Result
    • Selector
    • 검증함수
    • 메타타입
    • 동시성 프로그래밍
    • 메모리 안전
    • 에러처리
    • 접근제어 (Access Control)
    • 제네릭
    • 주요 프로토콜
  • 알고리즘
    • 그래프
    • 기초 알고리즘
    • 누적합(Prefix)
    • 복잡도
    • 비트마스킹
  • 운영체제
    • 운영체제의 개요
    • 프로세스와 스레드
    • CPU 스케줄링
    • 프로세스 동기화
    • 교착상태
    • 07. 메모리
    • 08.가상 메모리
    • 입출력 장치
    • 파일 시스템
  • UIKit
    • UITableView xib으로 만들어보기
  • 🖊️정보 기록
    • 코코아팟 배포하는 방법
  • iOS Project
    • 채팅 앱 만들기
      • Trouble shooting
      • 1. 디자인
      • 2. AutoLayout
    • 날씨 조회 어플리케이션
      • Figma를 이용한 UI 설계
      • TableView 연결하기
      • Networking
    • MVC -> MVVM으로 구조 변경해보기
      • MVC
      • MVVM
    • OAuth Project
      • 로컬 호스트를 이용한 로그인 페이지 제작
      • Github의 OAuth App 설정
    • Rest API 프로젝트
      • UI설계 (with Figma)
      • Network Model
      • MVVM 구조 전환
  • 🕶️UIKit
    • Compositional Layout
Powered by GitBook
On this page
  • 메모리 안전의 개념
  • 값타입 인스턴스
  1. Swift

메모리 안전

Previous동시성 프로그래밍Next에러처리

Last updated 2 years ago

메모리 안전의 개념

  • 멀티 쓰레드 환경에서만 메모리 충돌이 발생하는 것은 아니다.

    • 싱글 쓰레드 환경에서도 하나의 메모리에 동시적 접근이 발생할 수 있다.

      Untitled
    • 초록색 : 함수가 실행되는 약간의 시간 (조금 오랫동안 접근하고 있다고 가정)

    • 함수를 실행하는동안, 특정 메모리 하나를 사용하는데, 함수 내부에서 다시 그 메모리에 접근할 수 있다.

    var stepConflict = 1
    
    func increment(_ number: inout Int) {
        number += stepConflict
    }
    
    increment(&stepConflict) // 동시 접근으로 인한 문제
  • 동일한 함수 내에서 다른 종류의 매개변수를 단일 변수로 전달하는 경우

    func balance(_ x: inout Int, _ y: inout Int) {  // 평균값 설정하는 함수
        let sum = x + y
        x = sum / 2
        y = sum - x
    }
    
    var playerOneScore = 42
    var playerTwoScore = 30
    
    // 입출력 파라미터로 동일한 변수를 전달하고 있음
    //balance(&playerOneScore, &playerOneScore)   // 에러 발생 ⭐️, 하나의 메모리에 동시에 접근할 수도 있음.
    
    balance(&playerOneScore, &playerTwoScore)   // 에러 발생하지 않음

값타입 인스턴스

  • 값 타입 인스턴스는 속성 하나가 아니라 인스턴스 전체에 대해 읽기와 쓰기를 수행한다.

  • 동일한 인스턴스에 접근해서 저장 속성의 값을 나누는 것은 메모리 안전하지 않다.