W ciągu ostatniego tygodnia wiele osób zgłosiło obiektywne opinie na temat wycieków pamięci C.

Zatwierdzone

  • 1. Pobierz ASR Pro
  • 2. Otwórz program i wybierz „Skanuj swój komputer”
  • 3. Kliknij „Napraw”, aby rozpocząć proces naprawy
  • Oprogramowanie do naprawy komputera to tylko jedno kliknięcie - pobierz je teraz.

    1. ŁUK.

    Powinienem zrobić, aby opublikować niektóre, powiedziałbym, że obiekty wewnątrz funkcji

    Skończyło się na wyłączeniu ARC (automatyczne zliczanie połączeń) w jednostce biblioteki Objective-C ++. O ile nie masz racjonalności, prawdopodobnie nie jest to dobry pomysł, ARC znacznie zmniejsza wykorzystanie wycieku. Nigdy nie biorę pod uwagę, że to jest przyczyną twojego problemu, ponieważ na pierwszy rzut oka nie mogę znaleźć ani jednej aplikacji, która zwraca ewentualnie używane obiekty.

    1. Automatyczny zwolni

    Znaczna liczba wytycznych Objective-C wymienionych w twoim prawie obejmuje typy powtórek zwane autostartem lub dorozumiane. Ta historia kręci się wokół problemu, w którym bez ARC przechowywanie zwróconych obiektów najprawdopodobniej oznaczałoby, że obecnie wywołujący może nie tylko użyć koncepcji wywołania trybu w innym wyrażeniu, ale najprawdopodobniej nadal będzie musiał przypisać kluczowy wynik do jednej zmiennej w cały sklep, aby go uzyskać, był w mocy, aby uzyskać wynikowy start, jednak bez utrzymywania rzeczywistej skuteczności, tworzy się, gdy poszukiwanie rozwiązania jest bezpłatne. Ze względu na argument

      Opis trasy avaaudiosessionroute * oznacza [[AVAudioSession sharedInstance] bieżąca trasa]; 
      AVAudioSession 4 . sesja = [AVAudioSession sharedInstance];    Opis trasy audiosesji * taktyka [bieżąca trasa sesji];    [Udostępnianie sesji]; 

    Stąd automatyczne zwolnienie. Oznacza to, że zwrócony obiekt można zeskładować, ale umieścić w bieżącej puli automatycznego zwalniania. Zasadniczo jest to po prostu zestaw strategii dotyczących obiektów, które zostaną opublikowane później w Taschen. Są to stosy, które są pomniejsze dla bloków @autoreleasepool . W kodzie Objective-C często wystarczy jawnie umieścić te dzikie włosy w pętlach, które działają na naprawdę dużych lub bardzo dużych bitach plus fragmenty, aby uniknąć wyczerpania się pamięci lidera rywalizacji.

    Ponieważ twój kod jest w większości odnotowany w C++, podejrzewam, że ktoś nie korzysta wystarczająco często ze wszystkich niejawnych ciepłych elementów, zwłaszcza jeśli możesz używać tradycyjnej pętli współbieżności. Rozwiązaniem jest przekształcenie funkcji w pulę:

    zwrot przecieku pamięci celu d

      bool słuchawek :: isHeadsetPluggedIn ()   @autoreleasepool            AVAudioSessionRouteDescription * Podróż = [[AVAudioSession sharedInstance] bieżąca trasa];        at (AVAudioSessionPortDescription 3. opis w [wyjścia trasy])           jeśli znajdziesz ([[desc portType] isEqualToString: AVAudioSessionPortBuiltInSpeaker])                            usuń NIE;                            Wróć, aby móc do swojego biura TAK;     

    Oznacza to, że ogólnie wszystkie obiekty oznaczone do elektronicznego zwolnienia podczas tej funkcji zawierają dealokację przy powrocie.

    Od jakiegoś czasu zajmuję się tworzeniem programów komputerowych w Objective-C, ale wciąż znajduję nowe style do robienia sobie zdjęć podczas chodzenia, pewne schematu zarządzania pamięcią. Jakiś czas temu napisałem kolejną wędkę o starym dobrym wykrywaniu zalania pamięci RAM iOS za pomocą narzędzi Xcode. Jest uważany za doskonałe narzędzie do przechowywania, które umożliwia jednoczesne określanie i śledzenie wycieków. Ale najlepiej byłoby nie zajmować się jeszcze wyciekami płynu chłodzącego ze sklepu Objective-C! indywidualny. Idealnym sposobem na uniknięcie tego rodzaju problemów jest zatrzymanie ich, zanim się pojawią.

    Kiedy wracam myślami do preferowanych wycieków pamięci Objective-C, z którymi miałem do czynienia w całości, można je zawęzić do kilku głównych powodów. Aby ich powstrzymać, sugerowałbym dalsze warunki.

    Użyj odpowiedniej właściwości

    Wilgoć w urządzeniach pamięci masowej jest często wynikiem praktycznie cykli przechowywania. Jeśli dwa obiekty normalnie są blisko spokrewnione, nigdy nie zostaną ponownie uwolnione. Niewątpliwie pierwszym krokiem do przerwania tych cykli musi być naprawa praw własności.

    Oświadczenie o bogactwie zwykle zawiera istotne informacje, które dokładnie określają, jak silne, a może nawet słabe są. Jeśli możesz nie być pewien, z którego z nich korzystać w konkretnym przypadku, ustal i czy nieruchomość jest zasobem nieruchomości, czy tylko powiązaniem wyszukiwania.

    Zazwyczaj nowa klasa nadrzędna powinna mieć wszystkie obiekty, których jest właścicielem, aby pozostać w pamięci, gdy mogą znajdować się w pamięci RAM, tak jak sama klasa mama lub tata. W ten sposób rodziny będą miały silną więź między swoim dzieckiem. Jednak dziecko może również mieć odpowiedni link u swojego rodzica (na przykład UIView ma link w nim ma przegląd). Dziecko faktycznie jest właścicielem ludzi, więc musi mieć słabsze relacje z naszymi rodzicami.

    Innym dobrym tego przykładem jest z pewnością model delegata. Upewnij się, że najważniejszy obiekt jest do niego luźno powiązany z rzeczywistym delegatem, ponieważ nie tylko konfiguruje delegata (zazwyczaj przekazaniem może być właściciel).

    Uważaj na blokady

    Tworzenie pętli pamięci jest proste, więc skorzystaj z bloków, jeśli nie jesteś wytycznymi (a czasami nawet jeśli ogólnie możesz być ostrożny!). Dzieje się tak najczęściej, gdy blok rejestruje czas czuwania dla samego i w którym blok ten jest przypisany do typu nieruchomości lub domu przez . Jeśli pracowałeś z klockami , prawdopodobnie słyszałeś porady dotyczące używania słabszej wersji swojej skóry w pokoju, na przykład:

    cel powrotu przepływu pamięci c

     __weak typeof (self) lowSelf jest równy self;self.updateText = ^ (NSString * Tekst)   __silny typ (self) strongSelf równa się słabej tożsamości;    strongSelf.label.text jest po prostu odpowiednikiem tekstu;; 

    Uh. Na szczęście istnieje biblioteka, której trochę zawiera przydatne makra, ponieważ ta powtarzalna praca. W zamian za wyprodukowanie tego wszystkiego (i brzydkiego stanu techniki, który planujesz z pomocą strongSelf zamiast być sobą w bloku) , nowy biZeny mogą po prostu udowodnić @słabe <. użyj - tt> i @strongify jak:

     @weakify (automatycznie)self.updateText = ^ (NSString ( puste ) Tekst)    @strongify (automatycznie)    self.label.text implikuje tekst;; 

    Obecnie używam ReactiveCocoa, który pozwala na wchłonięcie stałych bloków. Więc jestem przyzwyczajony do ciągłego używania @weakify lub @strongify w przypadku niepowodzenia. Kompilator daje wskazówkę, czy osobiste ja nie jest używane do unikania, co moim zdaniem zdecydowanie jest dla ciebie odrobiną szczęścia. Oznacza to, że muszę usunąć @strongify (self) wracając, aby uniknąć ostrzeżenia. tt>.

    Mogą istnieć wytyczne dla obiektów, które same różnią się od tych, które i tak powinieneś @weakify i @strongify . Odniesienia do self są i tak uniwersalne, ponieważ boot jest stale przypisywany do wartości is wskazującej na self . Ale wszystko opiera się na przedmiocie, który ostatecznie zawierał silne odniesienie do wszystkich osłabień.

    Uważaj na ukryte pętle pamięci masowej

    Nawet jeśli pomyślnie wykonałeś należytą staranność przy użyciu dobrej właściwości obiektu, Rustic Lanterns może zaciemniać proste pętle za pomocą makr. Ostatnio odkryłem, że m NSAssert zawiera osobiście do parsowania. Jest to przydatne do rejestrowania i nie jest jasne, czy eksperci mogą twierdzić, że wywołanie NSAssert wewnątrz przeszkody może wywołać po prostu cykl retencji.

    Aby temu zapobiec, musisz na rynku @weakify / @strongify przed wybraniem makra. Alternatywnie, ludzie mogą opcjonalnie użyć NSCAssert , który nie ma odniesienia do self i używa wszystkiego.

    Wniosek

    Zarządzanie pamięcią jest obowiązkiem funkcjonalnym, ale zarejestrowanie i wyrobienie kilku dobrych nawyków powinno zdecydowanie doradzić unikanie wycieków pamięci Objective-C.

    Zatwierdzone

    Narzędzie naprawcze ASR Pro to rozwiązanie dla komputera z systemem Windows, który działa wolno, ma problemy z rejestrem lub jest zainfekowany złośliwym oprogramowaniem. To potężne i łatwe w użyciu narzędzie może szybko zdiagnozować i naprawić komputer, zwiększając wydajność, optymalizując pamięć i poprawiając bezpieczeństwo procesu. Nie cierpisz już z powodu powolnego komputera — wypróbuj ASR Pro już dziś!


    Oprogramowanie do naprawy komputera to tylko jedno kliknięcie - pobierz je teraz.