iOS 메모리 관리 요약(ARC/MRC)
MRC 원리
MRC: 수동 관리 메모리(retain,release,autorelease,더 이상 말하지 않음) 보유 대상,retain+1,인용 계수 더하기 1,방출 대상:release-1,인용 계수 감소 1,인용 계수가 0일 때 자동으로 메모리를 방출합니다.autorelease 대상 메모리의 관리는 autoreleasepool에 넣고 pooldrain일 때 메모리를 회수합니다.(이것은 Objective-c의 운행 시 특성과 쓰레기 회수 메커니즘을 바탕으로 함)
MRC에서 메모리 관리의 단점:
1. 한 무더기의 메모리를 방출할 때 먼저 이 무더기의 공간을 가리키는 바늘이release에 있는지 확인해야 한다.(조기 석방 방지)
2. 바늘이 가리키는 무더기 공간을 방출하려면 먼저 어떤 것이 같은 무더기를 가리키는지 확인해야 한다. 이런 바늘은 한 번만 방출할 수 있다.(여러 번 방출되어 메모리 유출 방지)
3. 모듈화 작업을 할 때 대상은 여러 모듈에 의해 만들어지고 사용될 수 있으며 마지막에 누가 다선정 작업을 방출했는지 확정할 수 없고 어느 선정이 마지막에 사용이 끝났는지 확정하지 못한다.
ARC 원리
ARC의 규칙은 대상이 강한 바늘 인용이 없으면 방출된다는 것이다. 다시 말하면 강한 인용 바늘 변수가 대상을 가리키면 이 대상은 메모리에 존재한다.약한 바늘이 가리키는 대상은 자동으로 빈 바늘(nil 바늘)로 변해 야생 바늘 오류를 일으키지 않는다.
ARC의 이점
인용 계수 방식의 메모리 관리 방식은 변하지 않았습니다. 인용 계수strong 변수가 변수 역할 영역을 초과할 때, 인용 계수strong 변수가 변수 역할 영역을 초과할 때,retain의 대상을 자동으로 방출합니다. 즉,release를 자동으로 호출합니다.
ARC의 단점:
1. ARC는 우리에게 프로그래밍에 많은 것을 가져다 주지만 메모리 유출이 발생할 수도 있다.다음과 같은 두 가지 경우:
순환 참조: A에는 속성 참조 B가 있고 B에는 속성 참조 A가 있으며 모두strong 참조인 경우 두 객체 모두 해제할 수 없습니다.
: , 。outlet weak , 。
데드 사이클: ViewController에 무한 사이클이 있으면 ViewController에 대응하는view가 없어져도 ViewController를 놓을 수 없습니다.
2. ARC는 추가적인retain/release를 초래하여 불필요한 소모를 초래할 수 있다. 왜냐하면 이것은 MRC보다 조금 느리기 때문이다. 그러나 이러한 추가 인용 계수는 코드 운행의 정확성을 폭증시켰다.
ARC는 OC 대상에 대한 메모리 관리만 하고 CoreFundation의api 사용에 대해 그의 대상 소유권이 OC 대상 관리에 이관되지 않아 수동으로 풀어야 한다.현재 Xcode는 ARC/MRC 혼합 코딩을 지원합니다.
iOS 학습 길에 있는 초등학교 승려, 지적을 환영합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.