You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
protocolBDelegate:AnyObject{func method()}classA:BDelegate{
lazy varb:B={letview=B()
view.delegate =selfreturn view
}()func method(){// code}}classB{
weak vardelegate:BDelegate?func dismiss(){
delegate?.method()}}// var A: A? = A()// A?.b// A.nil/*weak키워드로 참조를 약하게 만들지 않으면 A, B의 인스턴스는 해제되지 않는다.*/
ARC + Closure
import UIKit
classUser{varnickname="JACK"
lazy varintroduce:()->String={[weak self]inreturn"저는 \(String(describing:self?.nickname))입니다."// self로 접근하기 때문에 순환 참조 발생}init(){print("User init")}deinit{print("User deinit")}}varuser:User?=User()
user?.introduce()// RC + 1
user =nil// User init// User deinit
값 캡처
호출시에 값이 캡처된다.
func myClosure(){varnumber=0print("1: \(number)")letclosure:()->Void={[number]in// 값 캡처, 값 타입 - 복사, 클로저 안에서는 값이 영향을 받지 않는다.print("closure: \(number)")}closure()
number =100print("2: \(number)")closure()}myClosure()/*1: 0closure: 02: 100closure: 0*/
The text was updated successfully, but these errors were encountered:
ARC
메모리 구조
ARC
RC (참조 횟수)
생성/해제
해결
순환 참조인 녀석을 먼저 nil
수동으로 해결하기 어렵다.
weak, unowned keyword
ARC + delegate
ARC + Closure
값 캡처
The text was updated successfully, but these errors were encountered: