[ios/swift]ARC

감자맨·2022λ…„ 8μ›” 24일
0

swift

λͺ©λ‘ 보기
14/14
post-thumbnail

Today what i learned !

πŸ’» πŸ“’πŸ“• πŸ“—πŸ“˜πŸ“™πŸ“šπŸ“–

ARC νŠΉμ§•

  • ARC κΈ°λŠ₯은 μžλ™μœΌλ‘œ λ©”λͺ¨λ¦¬λ₯Ό 관리해 μ£ΌλŠ” 방식.
  • ν•„μš”ν•˜μ§€ μ•Šμ€ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό λ©”λͺ¨λ¦¬μ—μ„œ ν•΄μ œν•˜λŠ” λ°©μ‹μœΌλ‘œ λ™μž‘ν•œλ‹€.
  • μ°Έμ‘° μΉ΄μš΄νŒ… μ‹œμ μ΄ μ»΄νŒŒμΌμ‹œμ— μ‹€ν–‰λœλ‹€.

κ°•ν•œμ°Έμ‘°

μΈμŠ€ν„΄μŠ€κ°€ κ³„μ†ν•΄μ„œ λ©”λͺ¨λ¦¬μ— λ‚¨μ•„μžˆμ–΄μ•Ό ν•˜λŠ” λͺ…뢄을 λ§Œλ“€μ–΄ μ£ΌλŠ” 것이 λ°”λ‘œ κ°•ν•œμ°Έμ‘°μ΄λ‹€.
μΈμŠ€ν„΄μŠ€λŠ” μ°Έμ‘° νšŸμˆ˜κ°€ 0이 λ˜λŠ” μˆœκ°„ λ©”λͺ¨λ¦¬μ—μ„œ ν•΄μ œλ˜λŠ”λ°, μΈμŠ€ν„΄μŠ€λ₯Ό λ‹€λ₯Έ μΈμŠ€ν„΄μŠ€μ˜ ν”„λ‘œνΌν‹°λ‚˜ λ³€μˆ˜, μƒμˆ˜ 등에 ν• λ‹Ήν•  λ•Œ κ°•ν•œμ°Έμ‘°λ₯Ό μ‚¬μš©ν•˜λ©΄ μ°Έμ‘° νšŸμˆ˜κ°€ 1μ¦κ°€ν•˜κ²Œ λœλ‹€.
또, κ°•ν•œμ°Έμ‘°λ₯Ό μ‚¬μš©ν•˜λŠ” ν”„λ‘œνΌν‹°, λ³€μˆ˜, μƒμˆ˜ 등에 nil을 ν• λ‹Ήν•΄μ£Όλ©΄ μ›λž˜ μžμ‹ μ—κ²Œ ν• λ‹Ήλ˜μ–΄ 있던 μΈμŠ€ν„΄μŠ€μ˜ μ°Έμ‘°νšŸμˆ˜κ°€ 1 κ°μ†Œν•œλ‹€.

class Person {
    let name: String

    init(name: String) {
        self.name = name
        print("\(name) is being initialized")
    }

    deinit {
        print("\(name) is being deinitialized")

       }
    }
var reference1: Person?
var reference2: Person?
var reference3: Person?

reference1 = Person(name: "yoojin")
//yoojin is being initialized
//μΈμŠ€ν„΄μŠ€μ˜ μ°Έμ‘° 횟수: 1

reference2 = reference1 // μΈμŠ€ν„΄μŠ€μ˜ μ°Έμ‘° 횟수 : 2
reference2 = reference1 // μΈμŠ€ν„΄μŠ€μ˜ μ°Έμ‘° 횟수 : 1
reference2 = reference1 // μΈμŠ€ν„΄μŠ€μ˜ μ°Έμ‘° 횟수 : 0
//yoojin is being deinitialized

μ•½ν•œμ°Έμ‘°

μ•½ν•œμ°Έμ‘°λŠ” κ°•ν•œμ°Έμ‘°μ™€ 달리 μžμ‹ μ΄ μ°Έμ‘°ν•˜λŠ” μΈμŠ€ν„΄μŠ€μ˜ μ°Έμ‘° 횟수λ₯Ό μ¦κ°€μ‹œν‚€μ§€ μ•ŠλŠ”λ‹€.
참초 νƒ€μž…μ˜ ν”„λ‘œνΌν‹°λ‚˜ λ³€μˆ˜μ˜ μ„ μ–Έ μ•žμ— weak ν‚€μ›Œλ“œλ₯Ό 써주면 κ·Έ ν”„λ‘œνΌν‹°λ‚˜ λ³€μˆ˜λŠ” μžμ‹ μ΄ μ°Έμ‘°ν•˜λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό μ•½ν•œμ°Έμ‘°ν•œλ‹€.

κ°•ν•œμ°Έμ‘° μˆœν™˜ 문제λ₯Ό μ•½ν•œμ°Έμ‘°λ‘œ ν•΄κ²°

class Room {
    let number: String

    init(number: String) {
        self.number = number
    }

    weak var host: Person?

    deinit {
        print("Room \(number) is being deinitialized")
    }
}

var yoojin: Person? = Person(name: "yoojin")
var room: Room? = Room(number: "25")

room?.host = yoojin // Person μΈμŠ€ν„΄μŠ€μ˜ μ°Έμ‘° 횟수 : 1
yoojin?.room = room // Room μΈμŠ€ν„΄μŠ€μ˜ μ°Έμ‘° 횟수 : 2

yoojin = nil // Person μΈμŠ€ν„΄μŠ€μ˜ μ°Έμ‘° 횟수 : 0, Room μΈμŠ€ν„΄μŠ€μ˜ μ°Έμ‘° 횟수 : 1
//yoojin is being deinitialized
print(room?.host)  //nil

room = nil  // Room μΈμŠ€ν„΄μŠ€μ˜  μ°Έμ‘° 횟수 : 0
// Room 25 is being deinitialized

μ°Έκ³  μ„œμ  : SWIFTν”„λ‘œκ·Έλž˜λ°5 μ•Όκ³°

profile
λ‚˜λŠ” μ½”λ”©ν•˜λŠ” κ°μžλ‹€!

0개의 λŒ“κΈ€