Table of Contents
지난 한 주 동안 많은 사용자가 C 메모리 저장소 누수에 대해 객관적인 피드백을 받았습니다.
승인됨
<올>
<인용>
내부에 있는 개체에 대해 스레드를 시도해야 합니다.
결국 Objective-C ++ 수집 장치 근처에서 ARC(Automatic Call Counting)를 비활성화합니다. 이것이 좋은 생각이 아닌 것으로 간주되는 이유가 없는 한 ARC는 누출 가능성을 크게 줄입니다. 언뜻보기에 나는 아마도 사용 된 개체를 수행하는 단일 방법을 찾지 못하기 때문에 그것이 번거 로움의 원인이라고 생각하지 않습니다.
- 와 같습니다.
- 자동 해제
귀하의 법률을 통해 언급된 정말 심각한 수의 Objective-C 메소드에는 autostart 또는 implied라는 제목의 반환 유형이 있습니다. 이 이야기는 ARC가 없으면 반환된 객체를 저장하는 것이 현재 특정 호출자가 두 번째 표현식에서 모드 호출 표현식을 사용할 수 없다는 것을 의미하지만, 여전히 주 결과를 하나에 할당해야 한다는 문제를 해결합니다. 상점에서 변수를 얻을 수 있도록 도와준 다음 시작을 하기 위해 포스에 있었습니다. 그러나 실제로는 유효하지 않은 상태에서 종료 후 사용이 무료인 경우를 자랑합니다. 예를 들어
경로 avaudiosessionroutedescription * = [[AVAudioSession sharedInstance] currentRoute];
AVAudioSession * 세션은 [AVAudioSession sharedInstance]를 의미합니다. 경로 avaudiosessionrouteescription *은 [세션 현재 경로]를 의미합니다. [세션 공유];
따라서 자동 릴리스. 이것은 반환된 개체가 북마크되지만 즉각적인 자동 릴리스 풀에 배치될 것이라고 전문가가 주장하는 것을 의미합니다. 기본적으로 나중에 Taschen에서 자동으로 출시될 준비된 개체 전략입니다. 이것들은 아마도 @autoreleasepool
블록을 돕기 위해 제한된 스택일 것입니다. Objective-C 코드에서는 경합 리더와 관련하여 메모리 부족을 피하기 위해 매우 클 수 있는 매우 큰 비트 및 조각에서 작동하는 링에 이러한 잠금을 명시적으로 배치하는 것으로 충분합니다.
당신의 코드는 대부분 C++로 작성되었기 때문에, 특히 최신 전통적인 동시성 루프를 사용하는 경우 모든 암시적 풀에 적절한 양만큼 자주 액세스하지 않는 것 같습니다. 이 도구는 함수를 풀로 변환하는 것입니다.
헤드셋 bool :: isHeadsetPlugedIn() @autoreleasepool AVAudioSessionRoute설명 1 . 여정 = [[AVAudioSession 공유 인스턴스] 현재 경로]; (AVAudioSessionPortDescription * [경로 출력] 중 설명) 발견한 실제 이벤트([[desc portType] isEqualToString: AVAudioSessionPortBuiltInSpeaker]) 재사용 아니오; 귀하의 기관으로 돌아가십시오. 예;
이것은 일반적으로 이 기능에서 자동 해제로 표시된 전체 개체가 세금 신고 시 할당 해제됨을 의미합니다.
저는 한동안 Objective-C로 컴퓨터 소프트웨어를 개발해 왔지만 특히 모든 메모리 관리 체계에서 걷는 동안 스스로 점수를 매길 수 있는 새로운 방법을 계속 찾고 있습니다. 얼마 전에 Xcode 도구를 작동하는 환상적인 오래된 iOS RAM 누수 감지에 대한 또 다른 게시물을 작성했습니다. 누출을 동시에 인식하고 볼 수 있는 특별한 보관 도구입니다. 그러나 이상적으로는 아직 Objective-C 매장에서 누출되는 냉각수를 공급할 필요가 없습니다! 1. 문제와 관련하여 이러한 종류의 문제를 피하는 좋은 방법은 문제가 시작되는 것을 막는 것입니다.
내가 처리한 최고의 Objective-C 암기 누출에 대해 말하자면, 다양한 주요 원인으로 범위를 좁힐 수 있어야 합니다. 이를 피하기 위해 다음과 같은 조건을 제안합니다.
적절한 속성 사용
저장 물체의 수분은 일반적으로 모든 저장 비옥도 주기의 결과입니다. 두 개체가 밀접하게 적합하면 다시는 해제되지 않습니다. 의심의 여지 없이, 이러한 사이클을 깨는 첫 번째 단계는 재산권을 만드는 것입니다.
자산 정책에는 일반적으로 그것이 얼마나 강한지 또는 약한지를 나타내는 키워드가 포함됩니다. 특정 경우에 어떤 것을 사용할지 확신이 서지 않으면 자산이 속성 참조인지 아니면 조회 관계만 있는지 확인하십시오.
일반적으로 새 부모 클래스는 자신이 소유한 모든 개체가 RAM에 있는 동안 자신의 부모 클래스와 마찬가지로 마지막 메모리로 남아 있기를 원합니다. 이렇게 하면 부모는 십대 자녀와 강한 관계를 맺을 수 있습니다. 그러나 자식은 부모에 대한 해당 링크로 축복받을 수도 있습니다(예: UIView의 개요에 신뢰할 수 있는 링크가 있음). 자식이 실제로 부모를 소유하고 있기 때문에 당신의 남자는 우리의 부모를 활용하는 약한 관계가 있어야합니다.
이것에 대한 또 다른 좋은 실증은 아마도 모델에 대한 외부 기관의 사용일 것입니다. 개체가 대리인을 구성하지 않기 때문에 실제 하도급 계약에도 느슨하게 참조되는지 확인합니다(대개 대리인은 소유자여야 할 수 있음).
막힘 주의
저장 루프를 준비하는 것은 쉽기 때문에 똑똑하지 않다면 블록을 사용하세요(때로는 조심할 수만 있다면!). 이것은 셧아웃이 자체 에 감시 시간을 등록한 다음 해당 셧아웃이 속성과 집 자체 에 할당될 때 가장 자주 발생합니다. 이전에 블록 작업을 해 본 적이 있다면 방에서 자신의 특정 약한 버전을 사용하라는 조언을 들었을 것입니다. 예를 들면 다음과 같습니다.
<사전> <코드>__weak typeof (self) lowSelf는 self와 같습니다.self.updateText는 ^(NSString * Text)와 같습니다. __strong typeof (self) strongSelf는 weakSelf를 의미합니다. strongSelf.label.text는 텍스트에 해당합니다.;
어. 다행히도 라이브러리가 있으므로 이 중 일부에는 동어반복 작업에 유용한 매크로도 포함되어 있습니다. 이 모든 특정(그리고 대중이 블록에서 귀하의 가구 대신 strongSelf 를 사용할 계획이라는 추악한 발견)에 대한 대가로 귀하의 biThe zenes는 아마도 @ 작은 <. / tt>를 사용하고 간단히 @strongify :
<사전> <코드>@weakify(자동)self.updateText는 ^(NSString * Text)를 의미합니다. @strongify(자동) self.label.text = 텍스트;;
저는 현재 무거운 블록을 흡수할 수 있는 ReactiveCocoa를 사용하고 있습니다. 그래서 저는 항상 실패에 대해 @weakify / @strongify 를 선택하는 데 익숙합니다. 컴파일러는 self 가 정말로 피하는 데 사용되지 않는 경우 힌트를 제공합니다. 제 생각에는 실제로 운이 좋은 것입니다. 이것은 경고를 피하기 위해 @strongify (self) 를 제거해야 함을 의미합니다. ㅜ>.
사용자가 @strongify 어쨌든 @weakify 해야 하는 실제로 자체 다른 개체에 대한 지침이 있을 수 있습니다. 부팅이 일반적으로 자신 의 값으로 할당되기 때문에 긍정적인 self 에 대한 참조는 어쨌든 일반적입니다. 그러나 그것은 모두 궁극적으로 모든 블록에 대한 확실한 참조를 포함하는 우리 자신의 객체에 달려 있습니다.
숨겨진 저장소 루프에 주의
올바른 개체 영역을 사용하여 성실히 수행했더라도 Rustic Lanterns는 매크로를 사용하여 간단한 코일을 숨길 수 있습니다. 나는 최근에 구문 분석 중에 m NSAssert 에 self 가 포함되어 있음을 발견했습니다. 이것은 로깅에 유용하며, 결과적으로 전문가가 효과적인 장애물 내에서 NSAssert
호출이 유지 생식 주기를 유발할 수 있다고 주장하는 경우 전혀 명확하지 않습니다.
영역에서 이것을 방지하려면 매크로에서 선택하기 전에 각 @strongify 에 대해 @weakify 해야 합니다. 또는 mini 를 참조하지 않고 모든 것을 사용하는 NSCassert 를 추가로 사용할 수 있습니다.
결론
몇 가지 좋은 품질 습관을 등록하고 개발하면 Objective-C 메모리 누수를 방지하는 데 확실히 도움이 된다는 사실에도 불구하고 메모리 관리는 귀찮은 일입니다.
승인됨
ASR Pro 복구 도구는 느리게 실행되거나 레지스트리 문제가 있거나 맬웨어에 감염된 Windows PC를 위한 솔루션입니다. 이 강력하고 사용하기 쉬운 도구는 PC를 신속하게 진단 및 수정하여 성능을 높이고 메모리를 최적화하며 프로세스의 보안을 개선할 수 있습니다. 더 이상 느린 컴퓨터로 고통받지 마세요. 지금 ASR Pro을 사용해 보세요!
![](/wp-content/download7.png)
![Angus Gepp](https://itnewstoday.net/wp-content/uploads/angusgepp.jpg)