ARC 메모리 변환
Core Foundation 대상은 주로 C 언어로 이루어진 Core Foundation Framework의 대상이고 그 중에서 대상 인용 계수의 개념도 있다. 단지 Cocoa Framework의retain/release가 아니라 자신의 CFRetain/CFRelease 인터페이스일 뿐이다.
ARC autoreleasepool 은 어떻게 작동합니까?OC에 GC(스팸 수거기)가 있습니까?
GC 쓰레기 수거기, JAVA C#에서 JAVA와 C#를 배운 사람들은 모두 알고 있다. 더미 속의 메모리는 가상 기기의 독립된 라인이 수거를 책임지는 것을 쓰레기 수거기라고 한다!
oc에서 ARC autoreleasepool은 GC처럼 Person*p = [[[[Person alloc] init] autorelease];자동 방출 탱크는 1>자동 방출 탱크의 공간이 소모됩니다 2>자동 방출 탱크가 방출될 때 autorelease로 표시된 모든 대상을 회수하여release 메시지를 보냅니다
다음은 MRC 코드 MRC 코드 id obj = [[NSObject alloc] init]입니다.void *p = obj; obj = p; [obj release];
Alloc는 하나의 대상을 인용하는데, 인용 계수는 1이고, 실제로는 체인 테이블에서 관리되는Retain일 때, 계수를 +1으로 하고, 계수release가 메모리를 철저히 방출해야 하는지 여부를 계산한다
ARC 코드 id obj = [[NSObject alloc] init];void p = (__bridge void )(obj); obj = (bridge id)(p); bridge 키워드를 사용하면 id 형식과void* 형식의 상호 변환을 실현할 수 있습니다
__bridge_retain 키워드는 유형이 변환될 때 객체의 소유권도 변환된 후 변수가 보유한 MRC 코드가 다음과 같다는 것을 나타냅니다. id obj = [[NSObject alloc] init].void *p = obj; [(id)p retain];
__bridge_retain 테스트 프로그램void*p = 0;{
Person *obj = [[Person alloc] init];
obj.name = @"liufan";
p = (__bridge void *)obj;
} Person tmp = (__bridge Person )p; NSLog(@“class=%@ %p %@“, [(__bridge Person *)p class], p, tmp.name);
bridge_transfer는 원래 대상의 소유권을 가진 변수를 유형 전환 후 원래의 소유권을 방출하려면bridge 를 사용해야 합니다transfer 키워드 MRC 코드는 다음과 같이 값을 부여하기 전에 소유권은 p id obj = (id)p입니다.Obj의 기술에 1 [obj retain]을 추가합니다.P bei [(id)p release];
요약: MRC 및 ARC 변환 bridgeretained는 컴파일러가 대신 retain 조작bridgetransfer는 컴파일러가 우리를 대신해서release 조작을 했다bridge는 단순히 유형 변환을 실행했을 뿐 소유권 이전이 진행되지 않았습니다. 만약에 CFArray Ref로 변환된다면 메모리 동적 메모리 분석 도구를 수동으로 풀어야 합니다. 보조 해결 방법: CMD+Shift+B
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ARC 메모리 변환Core Foundation 대상은 주로 C 언어로 이루어진 Core Foundation Framework의 대상이고 그 중에서 대상 인용 계수의 개념도 있다. GC 쓰레기 수거기, JAVA C#에서 JAVA와 C#...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.