나는 Swift에서 응용 프로그램을 개발 중이며 Objective-C가 아닌 비 원형 (non-arc Objective-C) 배경에서 왔습니다. 나는 기억 문제를 만났다. 그래서, 내 ViewControllers에서 deinit
을 구현했습니다. 그들 중 누구도 부름을받지 못했습니다. 일부 코드 예 :스위프트 메모리 관리
@objc protocol ServerDelegate {
@objc optional func onUpdateComplete()
}
var delegate_ : ServerDelegate?
내 모든 대리인이 강력한 참조로 설정되어있는 것으로 나타났습니다. 그래서 나는 그들에게 같은 약한 참조했다 :
@objc protocol ServerDelegate : class {
@objc optional func onUpdateComplete()
}
weak var delegate_ : ServerDelegate?
을 지금 deinit
각각의 ViewController 호출됩니다.
그러나 메모리를 볼 때 Navigation Controller에서 View Controller를 팝하면 해제됩니다. 예를 들어, 처음 10MB의 메모리가 할당 된 장면에서 뷰 컨트롤러를 밀었 고 메모리는 15MB로 증가했습니다. 이제 팝업 할 때 deinit
이 호출되었지만이 5MB는 해제되지 않았습니다. 하지만 내가 다시 밀면. 메모리가 20MB로 증가하지 않습니다. 15MB로 유지됩니다. 왜 이런 일이 일어나는 걸까요? 이게 정상인가? 이미지가 캐시되고 해제되지 않습니까? View Controller를 팝업 할 때 수동으로 해제 할 수 있습니까? 감사.
감사합니다. @ 토미. 예, 스토리 보드에서로드 중입니다. 제 경우에는 메모리 할당이 괜찮습니까? – kashif789us
새 수량이 누적되지 않아야합니다. Instruments Leaks 도구를 사용하여 자신감이 있는지 확인해 볼 수는 있지만 괜찮은 것 같아요. 애플의 정책은 일종의 무거워서 (이상한 깜짝 선물) 항상 이상적이지는 않지만 여기서는 틀렸다는 생각은하지 않는다. – Tommy
프로파일 러를 점검했는데 누수가 없습니다. – kashif789us