이종원
•
git rebase
•
[weak self]
멘토링
git rebase
•
길이 합쳐진다.
•
re+base
•
base → 우리가 브랜치를 새로팔때 그 기준이 되는 base
◦
(main), development (결국 합쳐지고 실제 배포할 브랜치)
▪
12월 14일 오후 6시 시점!
▪
종원브랜치 (종원님이 작업) - jbranch
•
j_commit1
•
j_commit2
▪
남훈브랜치 (남훈님이 작업) - nbranch
•
n_commit1
•
n_commit2
▪
남훈이 main에 병합했다 merge 했다!
•
n_commit2
•
n_commit1
•
…
main ㅁ———————————————————ㅁ——-—ㅁ
— j_branch commit1 commit 2——————
— n_branch commit1 commit2 commit 10———
•
충돌이 10개정도 발생함 (conflict)
•
머지 컨플릭났어 처리해! > 처리하고 add > merge continue > 머지 커밋 메시지 입력하세요! > 머지 커밋 메시지 하나 생기고!
[weak self]
◦
강한참조를 하고 있는 클래스들을 메모리 관리를 위해 약한 참조로 할 수 있게 weak를 씀!
메모리에 대해서! (with. ARC)
•
ARC라는것이 있음 Swift!
•
Objective-C
◦
메모리 (객체 인스턴스)에 대해 할당/해제를 할때 delloc / alloc메서드들을 개발자가 직접 코드짜면서 넣어줬어야함 > 수동으로 개발자가 메모리를 해제 할당했다!!
•
컴파일러가 알아서 잘~ 해줬으면 해
•
Automatic Reference Counting (자동 참조 계수) → 객체가 참조되고 있는 횟수를 추적하는 계수!
◦
힙 영역의 객체 → 동적 할당 참조를 하는 카운트 (횟수)를 추적해서 객체가 더 이상 필요하지 않을때 (참조하고있는 카운트 횟수가 없을때) 해당 객체에 대한 메모리를 자동으로 해제하는 방식이다!
◦
메모리 관리를 해준다!
◦
class VC {
var a: Model (Model → Class)
deinit {
a의 delloc같은 해제 메서드들을 구현하지 않아도되는것!
}
}
•
참조하는 방식
◦
강한참조 (strong Reference)
▪
기본적으로 Swift에서 변수 /상수는 모두 강한참조에요!!!
▪
객체에 대한 강한참조 카운트가 증가되어 있다면, 해당 객체는 메모리에서 유지되요~
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var person1: Person? = Person(name: "Green") // 강한참조
var person2 = person1 // 또 다른 강한 참조!
person1 = nil
-> person1이 nil이 되더라도 person2가 여전히 person1에 대해 강한 참조를 가지고 있기에 객체는 메모리에서 유지됨!!!!
Swift
복사
→ 사용되지 않는데도 실제 메모리에서 사라지지않고 어딘가에 있다~
→ 이런것들이 무수히 많아짐 → 더이상 메모리를 할당받을 공간이 없어요! → 앱이 터진다~ → 앱이 크래쉬가 난다! (메모리 성능을 저하시키는 하나의 주범)
◦
순환참조되고 있따! (순환참조)
▪
ARC 작동방식 특성상 두 객체가 서로 강한 참조를 하게 되는 경우!!! 순환참조를 일으킨다~~~
▪
두객체가 다 사용이 안되더라도 두객체가 서로 강한참조~ Strong 레퍼런스 카운트 참조계수를 감소하지 않기에 메모리에 계쏙 남는거에요~
▪
이를 위한 해결책으로! 약한참조/미소유참조라는 친구들 등장!
◦
약한참조
▪
강한참조 → 참조 횟수를 증가시킨다~ But 참조횟수 증가 안시켜요!
▪
객체의 생명주기에 영향을 주지않으면서 참조를 유지를 할 수 있음
▪
순환참조 방지
class Person {
var name: String
weak (unowned) var friend: Person?
init(name: String) {
self.name = name
}
}
var person1: Person? = Person(name: "Green")
var person2: Person? = Person(name: "Red")
person1?.friend = person2
person2?.friend = person1
person1 = nil
Swift
복사
◦
미소유참조
▪
미소유참조는 Optional 값이 아니기에 nil로 설정될 수 없다!
▪
메모리에 그 참조하는 대상이 더 오래 살아있을거야! 라고 보장하는경우에~
코드로 보기!! (캡쳐리스트)
▪
코드로 살펴봐요! (weak self)
class AClass {
var title: String = "Green"
func result() {
DispatchQueue.main.asyncAfter(deadline: .now() + .second(3)) { [weak self] in
print(self?.title ?? "Green")
}
}
}
Swift
복사
▪
unowned self
class BClass {
var bClosure: (() -> Void)?
init() {
bClosure = { [unowned self(BClass)] in
print(self)
}
}
}
Swift
복사
▪
장점! (weak보다 장점!?)
•
간결할것 같다! 옵셔널바인딩이 필요없다~ (!)
struct AStruct {
var title: String
class BClass {
var subTitle: String
init
}
}
struct Astruct {
class BClass {
var title: String
init() { }
}
var bClass = Bclass()
}
let aStruct = Astruct()
aSTruct.bClass.title
Swift
복사