Swift 프로그램에서 autoreleasepool을 사용해야합니까?
의 17 페이지에 이 WWDC14 발표 , 그것은 말한다
Objective-C로 작업하십니까? 여전히 자동 릴리스 풀을 관리해야합니다.
autoreleasepool {/ * code * /}
그게 무슨 뜻입니까? 내 코드베이스에 Objective-C 파일이 없다면 autoreleasepool {}
불필요 하다는 뜻 입니까?
에 관련된 질문의 답변 , 예를 들어이 autoreleasepool
유용 할 수 있습니다 :
- (void)useALoadOfNumbers {
for (int j = 0; j < 10000; ++j) {
@autoreleasepool {
for (int i = 0; i < 10000; ++i) {
NSNumber *number = [NSNumber numberWithInt:(i+j)];
NSLog(@"number = %p", number);
}
}
}
}
위의 코드가 autoreleasepool
드롭 된 상태에서 Swift로 번역된다면, Swift는 number
변수가 첫 번째 이후에 해제되어야 한다는 것을 알 정도로 똑똑 }
할까요 (다른 언어처럼)?
이 autoreleasepool
패턴은 autorelease
객체를 반환 할 때 Swift에서 사용됩니다 (Objective-C 코드 또는 Cocoa 클래스를 사용하여 생성됨). autorelease
Swift 의 패턴은 Objective-C에서와 매우 유사합니다. 예를 들어, 다음 Swift 변환을 고려하십시오 (인스턴스화 NSImage
/ UIImage
객체).
func useManyImages() {
let filename = pathForResourceInBundle
for _ in 0 ..< 5 {
autoreleasepool {
for _ in 0 ..< 1000 {
let image = NSImage(contentsOfFile: filename)
}
}
}
}
Instruments에서 이것을 실행하면 다음과 같은 할당 그래프가 표시됩니다.
그러나 자동 릴리스 풀없이 수행하면 최대 메모리 사용량이 더 높다는 것을 알 수 있습니다.
은 autoreleasepool
당신이 목표 - C에서 할 수 있었던 것처럼, 오토 릴리즈 객체가 스위프트에 해제 될 때 명시 적으로 관리 할 수 있습니다.
참고 : Swift 네이티브 개체를 처리 할 때 일반적으로 자동 릴리스 개체를받지 않습니다. 이것이 프레젠테이션에서 "Objective-C로 작업"할 때만이 기능이 필요하다는 경고를 언급 한 이유입니다.하지만이 점에 대해 Apple이 더 명확했으면합니다. 그러나 Objective-C 객체 (Cocoa 클래스 포함)를 다루는 경우 자동 해제 객체 일 수 있습니다.이 경우 Objective-C @autoreleasepool
패턴 의 Swift 변환 이 여전히 유용합니다.
동등한 Objective-C 코드에서 사용한다면 Swift에서 사용할 것입니다.
Swift는 number 변수가 첫 번째 이후에 해제되어야한다는 것을 알 정도로 똑똑 할 것입니다.}
Objective-C가 작동하는 경우에만. 둘 다 Cocoa 메모리 관리 규칙에 따라 작동합니다.
물론 ARC는 number
루프의 반복이 끝날 때 범위를 벗어나는 것을 알고 있으며 이를 유지하면 그곳에서 해제 할 것입니다. 그러나 자동 해제 된 인스턴스를 반환했거나 반환 -[NSNumber numberWithInt:]
하지 않았을 수 있기 때문에 객체가 자동 해제되었는지 여부는 알려주지 않습니다 . 의 소스에 대한 액세스 권한이 없기 때문에 알 수있는 방법이 없습니다 -[NSNumber numberWithInt:]
.
'Programing' 카테고리의 다른 글
Python 로깅 모듈을 사용할 때 중복 로그 출력 (0) | 2020.09.13 |
---|---|
어떤 트랜잭션이 "테이블 메타 데이터 잠금 대기 중"상태를 유발하는지 어떻게 알 수 있습니까? (0) | 2020.09.13 |
조건부 고유 제약 (0) | 2020.09.13 |
Vim에서 현재 파일의 경로를 영구적으로 표시하려면 어떻게해야합니까? (0) | 2020.09.13 |
Eclipse Git 플러그인에서 기본 작성자 및 커미터를 어떻게 변경합니까? (0) | 2020.09.13 |