Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

weak와 unowned 참조 #30

Closed
Youngminah opened this issue Oct 3, 2021 · 0 comments
Closed

weak와 unowned 참조 #30

Youngminah opened this issue Oct 3, 2021 · 0 comments
Labels

Comments

@Youngminah
Copy link
Owner

Youngminah commented Oct 3, 2021

참조

  • 강력 순환 참조(Strong Reference Cycle)를 벗어나기 위해
  • 약한 참조(weak reference)와
  • 미소유 참조(unowned reference)를 사용


weak와 unowned

  • Optional : weakunowned의 차이점은 옵셔널이냐 옵셔널이 아니냐의 차이
  • 즉, unowned는 값이 있음을 가정하고 사용하며,
  • unowned 값이 nil이라고 한다면 크래쉬가 발생할 수 있음.
  • RC를 +1 시키지 않고 참조하는 것.


코드예제

class Person {
	let name: String
	init(name: String) { self.name = name }
	var apartment: Apartment?
	deinit { println("\(name) is being deinitialized") }
}
 
class Apartment {
	let number: Int
	init(number: Int) { self.number = number }
	weak var tenant: Person?
	deinit { println("Apartment #\(number) is being deinitialized") }
}
  • weak를 사용하는 코드

class Customer {
	let name: String
	var card: CreditCard?
	init(name: String) {
		self.name = name
	}
	deinit { println("\(name) is being deinitialized") }
}
 
class CreditCard {
	let number: UInt64
	unowned let customer: Customer
	init(number: UInt64, customer: Customer) {
		self.number = number
		self.customer = customer
	}
	deinit { println("Card #\(number) is being deinitialized") }
}
  • unowned를 사용하는 코드

  • Apartment 클래스에서 tenant 변수는 옵셔널로 사용하기 때문에 순환 참조를 피하기 위해서는 weak로 사용
  • CreditCard 클래스에서 customer 상수는 항상 값을 가지고 있어야 하므로 순환 참조를 피하고자 unowned로 사용
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant