Objective-C 자동 방출 풀 AutoreleasePool 상세 정보
1821 단어 Objective-C
OC에서 작성한 iOS 프로젝트에서 main.m 파일의 코드는 다음과 같습니다: 자동 방출 탱크에 사용됩니다.
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
자동 방출 탱크를 어떻게 만드는지 봅시다. iOS5.0 이후의 새로운 방법:
@autoreleasepool {
....
}
는 위와 같다.m중의 것과 같다.만약 대상이 alloc를 사용하여 생성된다면, 반드시release나autorelease로 방출해야 한다는 것을 기억해야 한다.이제 대상은 언제 풀어야 하는지 살펴볼까요?실행할 때, 대상이 어떤 대상에게 인용되지 않았을 때, 적당한 시간에 방출되면, 프로그램은 언제 방출되었는지 포착할 수 없다.프로그램은 여러 개의 자동 방출 탱크가 있을 수 있고, 자동 방출 탱크도 서로 끼워 넣을 수 있다.
자동 풀을 사용하는 이유를 살펴보겠습니다.
for (int i = 0; i < 1000000; i++) {
NSString *string = [NSString stringWithString:@"ABC"];
NSLog(@"%@",string);
}
만약 프로그램에서 대량의 임시 대상이 발생한다면, 이때 자동 방출 탱크를 사용하는 것을 고려해야 한다.이렇게 계속 순환하면 메모리 유출 문제를 초래할 수 있다(메모리 유출은 더 이상 사용하지 않는 메모리를 방출하지 않아 우리가 이 메모리를 다시 사용할 수 없게 하는 것을 말한다.)이 임시 대상들은 전체 순환이 끝날 때까지 메모리를 계속 누적하여 분배할 것이다.우리가 해야 할 일은 매번 순환할 때마다 메모리를 방출하는 것이다.코드 수정은 다음과 같습니다.
for (int i = 0; i < 1000000; i++) {
@autoreleasepool {
NSString *string = [NSString stringWithString:@"ABC"];
NSLog(@"%@",string);
}
}
자동 방출 탱크는 대상의 자체를 포함하지 않고 방출할 대상의 인용을 포함한다.현재 자동 방출 탱크에 autorelease 메시지를 보내면 대상의 인용을 추가할 수 있습니다.자동 방출탱크가 시스템의 쓰레기 수집 메커니즘이 아니라는 것을 주의해라.
마지막으로 우리는 자동 방출 탱크의 데이터 구조에 대해 이야기합시다.자동 방출 탱크는 창고의 구조로 새로운 자동 방출 탱크를 만들 때 창고 꼭대기에 놓인다.autorelease 메시지를 받은 대상은 이 자동 방출 탱크에 저장됩니다.
github 홈 페이지:https://github.com/chenyufeng1991 .여러분의 방문을 환영합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PreferenceBundle에서 오른쪽 상단에 Respring 버튼을 클릭합니다.만나서 반갑습니다, Minazuki라고합니다. 프로필 이름 : Minazuki_dev Twitter : Repo : 아직 중학생이므로 말이 이상한 곳이 있습니다만 용서해 주세요… 🙏 theos (Mac이든 단품이든 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.