iOS 메모리 관리
-
Retain Count
- 객체의 참조수를 관리하여 alloc시 참조수 1 증가, 0이 되면 객체 메모리 해제
- retain, release 메시지 사용 -
Mac OS X 10.5 : Garbage collector
- 프로그램 실행 중 동적으로 감시하고, 해당 영역에 있는 변수에서 접근 할 수 없는 객체 찾고 자동으로 메모리 해제
- 실행 타임에서 메모리 관리
- 문제점: 쓰레기 객체 탐색을 위해 CPU 소비 필요 -
Mac OS 10.7 : ARC
- 코드를 컴파일 할 때 참조수를 컴파일러가 증가, 감소 관리
Strong Reference Cycle
- 두 인스턴스가 서로 강한(strong) 참조를 하여 메모리에서 사라지지 않는 경우…
- ARC는 Reference Cycle에 자동적으로 대응 불가
- ‘weak’을 이용하여 방지
- custom delegate를 weak로 attribute 하는 이유
Retain Count
- 참조 종류
- Strong Reference: 객체가 다른 객체를 retain 하는 것. 기본 설정
- Weak Reference
: retain하지 않는 것. 단순 포인터 대입 (참조 순환 피하기 위해)
: Zeroing Weak Reference: ARC에서 약한 참조의 객체가 메모리 해제할 때 nil로 설정하여 메모리 crush 예방 - dealloc
- 참조 수가 1인 객체에 release 보내면 호출됨
- 마지막에 [super dealloc]; - NSAutoreleasePool
- 객체에 autorelease 메시지 -> Autorelase pool에 객체 추가 (가비지 컬렉터를 사용하지 않을 때)
- Cocoa application: 모든 이벤트를 제어하기 전에 생성, 제어 후 해제
- 오토릴리즈 객체를 리턴하는 클래스 메서드들이 있음.
ex) [NSString stringWithFormat: ….]
- Release 시점: 보통 현재 이벤트 루프가 끝날 때 - Retain
- alloc, new, copy가 포함된 이름을 가진 메서드 (copy, mutableCopy ...)
=> 참조수 + 1 (atorelease pool x)
- release 해야할 의무가 있음 - Release
- 소유를 원하지 않을 경우 release or autorelease
- 0일 때 dealloc - 접근자 메서드
- 다른 객체들이 인스턴스 변수를 접근하기 위해 사용
- getter, setter
- (void)setFoo:(NSDate *) x {
[x retain];
[foo release];
foo = x;
}
- (NSDate *)foo {
return foo;
}
Swift version Strong reference cycle 볼 필요 있음
'iOS > iOS 기본기' 카테고리의 다른 글
[iOS] nil, Nil, NULL, NSNull / Swift와 Objective-C에서의 nil 차이점 (0) | 2019.11.24 |
---|---|
[iOS] @property / @sythesize / @dynamic (0) | 2019.11.24 |
[iOS] NSObject / isa / Selector (0) | 2019.11.24 |
[Apple Document] iOS - The App Life Cycle (0) | 2019.11.21 |
[iOS] 현재 뷰 컨트롤러가 모달(Modal)인지 체크해보쟈 (0) | 2016.11.23 |