ios개발/개념 정리

<스위프트> 메모리 관리 : weak vs unowned

studying develop 2020. 3. 4. 13:58

<https://docs.swift.org/swift-book/LanguageGuide/AutomaticReferenceCounting.html#//apple_ref/doc/uid/TP40014097-CH20-ID57>

 

글 다썼는데 지워졌다;;;하하ㅏㅇ아

 

간단하게 정리한다. 

 

몇개 찾아봤는데 스위프트 다큐먼트 예시가 가장 좋은거 같다.

 

weak은 참조하던 객체가 해제되면 nil로 세팅한다. 즉 weak은 nil이 될 수도 있는 경우에 사용한다. 예를 들면 아파트랑 세입자 같은 경우 아래 그림이 이해가 잘된다.

 

 

이제는 unowned에 대한 내용이다.

 

unowned는 절대 nil이 되지 않을때 사용한다. 그래서 optional 타입으로 선언해도 안된다.

그래서 소비자랑 신용카드가 예시다. 신용카드는 소비자가 반드시 존재해야 생길 수 있다. 아파트는 세입자가 없어도 일단 nil로 될 수 있다는게 차이점 인듯 하다.

 

 

 


 

5일 지나니까 내가 까먹어서 제대로 이해 못한거 같아 다시 작성해 본다.

 

[https://www.youtube.com/watch?v=Q2ux2Gdt8KQ] 이 동영상을 보고 다시 이해했다.

 

차이점의 중요 포인트는 ! weak은 서로가 independent하다, unowned는 서로가 디펜던트 하다.

 

즉! weak을 예를 들면 사회와 사람이다. 사회는 사람에 강한 연결을 가지지만 (사람이 없으면 사회가 아니잔아) 사람은 사회에 weak 연결을 한다. 사회가 있던 없던 사람은 존재한다. 그래서 사람이 갖는 사회가 nil일 수 있다는 듯?

 

하지만 unowned의 예시는 소비자와 주문이다. 주문은 소비자가 없으면 없는거다. 소비자가 있어야 주문이 있다!

 

//weak

class Society{
	var members : [Person] = []
    func join(newMember : Person){
    	members.append(newMember)
    }
}

class Person{
	weak var mySociety : Society?
    func join(society : Society){
    	mySociety = society
        society.join(newMember : self)
    }
}

        
//unowned

class Order{
	unowned var orderPlacedBy : Customer
    init(orderPlaceBy: Customer){
    	self.orderPlaceBy = orderPlaceBy
    }
}

class customer{
	var myOrder : [Order]?
}