Under den gamla veckan fick ett antal användare rapporterad objektiv feedback om C ram-minnesläckor.

Godkänd

  • 1. Ladda ner ASR Pro
  • 2. Öppna programmet och välj "Skanna din dator"
  • 3. Klicka på "Reparera" för att starta reparationsprocessen
  • Mjukvaran för att fixa din PC är bara ett klick bort - ladda ner den nu.

    1. ARC.

    Jag borde försöka lägga upp några, skulle jag säga, produkter i en funktion

    Jag delar upp och inaktiverar ARC (Automatic Call Counting) i din Objective-C ++ insamlingsenhet. Om du inte har en anledning till att du förmodligen inte är en bra teknik, minskar ARC avsevärt chanserna att ha att göra med en läcka. Jag tänker aldrig på vilket tyvärr detta är orsaken till en individs problem, eftersom jag vid första anblicken inte kan hitta en enda metod som returnerar eventuellt använda objekt.

    1. Automatisk release

    Ett betydande antal Objective-C-metoder som anges i din lag har returalternativ som kallas autostart eller implicit. Den här berättelsen kretsar kring problemet att, även om den inte har ARC, lagring av returnerade objekt skulle föreslå att den som ringer för närvarande inte alltid kan använda modeanropsuttrycket som fungerar i ett annat uttryck, men att han fortfarande måste tilldela huvudresultatet till en variabel i fortsätta att hålla för att få det var i huvudsak Kraft att göra en efterföljande start ut, men utan att hålla det verkligen användbart, skapar när användningen efter slutet är gratis. Till exempel

      Route avaudiosessionroutedescription * = [[AVAudioSession sharedInstance] aktuellRoute]; 
      AVAudioSession * course = [AVAudioSession sharedInstance];    Route avaudiosessionroutedescription * betyder [session aktuellRoute];    [Sessionsdelning]; 

    Därav den automatiska frigöringen. Detta tyder på att det returnerade objektet kommer att sparas mer men placeras i den senaste auto-release-poolen. I grund och botten är det en helt ny uppsättning objektstrategier som sannolikt kommer att släppas senare i Taschen. Dessa är stackar som är begränsade för att bara hjälpa dig att blockera @autoreasepool . I Objective-C-kod är det ibland mycket att explicit placera dessa lås i loopar som fungerar på mycket större eller mycket stora bitar och strippar för att undvika att behålla kvarhållningen för stridsledaren.

    Eftersom din kod mestadels är skriven med C++, misstänker jag att du inte har tillgång till alla implicita pooler rutinmässigt nog, speciellt om du använder en traditionell loop av samtidighet. Lösningen är att omvandla din ansträngning till en pool:

    objective deborah memory leak return

      headphone bool :: isHeadsetPluggedIn ()   @autoreasepool            AVAudioSessionRouteDescription * Journey = [[AVAudioSession sharedInstance] currentRoute];        at (AVAudioSessionPortDescription * desc finns i [ruttutgångar])           när som helst du hittar ([[desc portType] isEqualToString: AVAudioSessionPortBuiltInSpeaker])                            återanvänd NO;                            Återgå till hela ditt kontor JA;     

    Detta innebär att, i vanliga fall, alla objekt markerade som automatiskt gratis under denna funktion avallokeras mot retur.

    Jag har utvecklat datorprogramvara med Objective-C ett tag nu, men jag fortsätter att hitta nya sätt – skjut mig själv när jag går, speciellt med minneshanteringsschemat. Även om jag sedan skrev ett annat inlägg som är relaterat till gamla goda iOS RAM-läckageidentifiering med hjälp av Xcode-verktyg. Det är ett nytt fantastiskt lagringsverktyg att känna igen tillsammans med spårläckor vid samma tid. Men helst skulle vi inte ha att göra med kylvätskeläckor från en viss Objective-C-butik ännu! 1. Det ideala sättet att undvika dessa möjliga typer av problem är att stoppa vart och ett av dem innan de börjar.

    När jag tänker tillbaka på de bästa Objective-C-minnesläckorna jag har hanterat, hur de kan minskas uppåt är det flera huvudorsaker. För att undvika henne skulle jag föreslå följande omständigheter.

    Använd den lämpliga egenskapen

    Fukt i förvaringsföremål är ofta resultatet av alla garderobscykler. Om två objekt är mycket nära besläktade, frigörs de aldrig mer ,. Utan tvekan är det första steget för att bryta dessa cykler om du vill fixa äganderätten.

    En sortssats innehåller vanligtvis ett sökord som en majoritet av anger exakt hur starkt eller negativt det är. Om du är säker på vilken du ska använda i ett visst fall, avgör om varje egenskap är en egenskapsreferens alternativt bara ett uppslagsförhållande.

    Vanligtvis vill en ny förälderklass komma från alla objekt den äger för att behålla i minnet medan de finns i RAM-minnet, precis som föräldern som din klass själv. På så sätt har föräldrarna definitivt en stark relation med eller till och med barn. Däremot kan ett barn ha en motsvarande länk till att det är förälder (till exempel en UIView levererar en länk i sin översikt). Barnet äger faktiskt föräldrarna, därför måste han ha en svag kärleksfull relation med våra föräldrar.

    Ett annat mycket exempel på detta är förmodligen utan tvekan delegatmodellen. Se till att ämnet är löst refererat till dess specifika delegat eftersom det inte snedvrider delegaten (vanligtvis kommer delegaten med största sannolikhet att vara ägaren).

    Se upp för blockeringar

    Det är lätt att skapa lagringsslingor, så använd hinder om du inte är smart (och ofta även om du kan vara försiktig!). Detta händer oftast när någon form av block registrerar en watchdog-tid på uppdrag av sig själv , och sedan genom vilket block som tilldelas det materiella godset eller hemmet självt . Om du har arbetat med block tidigare, har du förmodligen hört rådet att använda en svagare version av dig själv i rummet, till exempel:

    objektiv c minnesutflöde retur

     __svag typ av (själv) lågtSjälv är lika med jaget;self.updateText = ^ (NSString * Text)   __stark typ av (själv) starktSjälv som ett svagtSjälv;    strongSelf.label.text motsvarar normalt text;; 

    Äh. Lyckligtvis finns det ett bibliotek, några kommer från alla som innehåller användbara makron för ett repetitivt arbete. I utbyte mot i stort sett allt detta (och den fula upptäckten om att du planerar att använda strongSelf istället för din identitet i blocket), kan dina nya biThe zenes bara vara vid svag <. använd / tt> för att @strongify gilla:

     @weakify (auto)self.updateText = ^ (NSString * Text)    @strongify (auto)    self.label.text = text;; 

    Jag använder för närvarande ReactiveCocoa som specifikt låter dig absorbera tunga bitar. Så jag är van vid att alltid implementera @weakify / @strongify vid misslyckande. Kompilatorn ger en ledtråd om medveten inte används för att sätta stopp för, vilket i min mening är realistiskt lite tur för du måste. Det betyder att jag måste skaffa @strongify (self) för att kringgå varningen. tt>.

    Det kommer säkert att finnas riktlinjer för objekt som vanligtvis sig själva skiljer sig från vissa du bör @weakify för varje @strongify ändå. Referenser direkt till self är vanliga medan, eftersom booten vanligtvis toppas med värdet av personligen . Men allt beror på objektet, som i slutändan innehåller en stark referens till alla block.

    Se upp för dolda lagringsloopar

    Även om du har gjort din faktiska due diligence med hjälp av rätt leksaksegenskap, kan Rustic Lanterns dölja tydliga slingor med makron. Jag fick nyligen besked om att NSAssert innehåller själv vid analys. Detta är användbart för att signera, och det är inte helt klart om experterna är skapade att anrop av NSAssert bland ett hinder kan utlösa en lagringscykel.

    För att förhindra att detta händer, måste du @weakify / @strongify innan du väljer ett makro. Alternativt kan du valfritt använda NSCAssert och den har ingen referens till home och använder allt.

    Slutsats

    Minneshantering är ett problem, men att registrera och utveckla en liten mängd goda vanor borde definitivt hjälpa någon att undvika Objective-C-minnesläckor.

    Godkänd

    ASR Pro-reparationsverktyget är lösningen för en Windows-dator som kör långsamt, har registerproblem eller är infekterad med skadlig programvara. Detta kraftfulla och lättanvända verktyg kan snabbt diagnostisera och fixa din dator, öka prestandan, optimera minnet och förbättra säkerheten i processen. Lider inte av en trög dator längre - prova ASR Pro idag!


    Mjukvaran för att fixa din PC är bara ett klick bort - ladda ner den nu.