iOS 메모리 관리 요약(ARC/MRC)

1552 단어

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 학습 길에 있는 초등학교 승려, 지적을 환영합니다!

좋은 웹페이지 즐겨찾기