메모리에 올리고 내리는 것
class MyFriend{
var name: String
init(_ name: String = "이름없음"){
self.name = name
print("MyFriend가 메모리에 올라갔다.")
}
deinit{
print("메모리에서 사라짐: \(self.name)")
}
}
let anObjectMemoryAddress = Unmanaged.passUnretained(aFriend).toOpaque()
import UIKit
class MyFriend{
var name: String
init(_ name: String = "이름없음"){
self.name = name
print("MyFriend가 메모리에 올라갔다.")
}
deinit{
print("메모리에서 사라짐: \(self.name)")
}
var calledTimes = 0
let MAX_TIMES = 5
static var instancesOfSelf = [MyFriend]()
class func destroySelf(object: MyFriend){
instancesOfSelf = instancesOfSelf.filter{(aFriend : MyFriend) in aFriend !== object
}
}
func call(){
calledTimes += 1
print("called \(calledTimes)")
if calledTimes > MAX_TIMES{
MyFriend.destroySelf(object: self)
}
}
}
var myFriend = MyFriend("쩡대리")
let aFriend = MyFriend()
//Unmanaged.passUnretained(객체).toOpaque()로 해당 객체 메모리 주소 프린트
let anObjectMemoryAddress = Unmanaged.passUnretained(aFriend).toOpaque()
let secondMemoryAddress = Unmanaged.passUnretained(myFriend).toOpaque()
print(anObjectMemoryAddress)
print(secondMemoryAddress)
weak var aFriendToBeDetroied = MyFriend("개발하는정대리")
if aFriendToBeDetroied != nil{
aFriendToBeDetroied!.call()
} else{
print("객체가 더 이상 메모리에 없습니다.")
}