Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Objective-C Memória kezelés Készítette: Fahmi Arman B5EXTQ 2014.03.20.

Hasonló előadás


Az előadások a következő témára: "Objective-C Memória kezelés Készítette: Fahmi Arman B5EXTQ 2014.03.20."— Előadás másolata:

1 Objective-C Memória kezelés Készítette: Fahmi Arman B5EXTQ

2 Objective–C memória kezelés Tartalom Memória kezelés Referencia számlálás Objektum tulajdonlás, szabályok Property Mi ez? Formátum Példák ARC Bemutatás Megkötések Strong, Weak pointer

3 Referencia számlálás Retain/Release növeli, csökenti a számláló értékét Automatikus objektum felszabadítás, ha a számláló értéke 0 lesz Problémák lehetnek. Memory leak: több retain hivás, mint release. Dangling pointer: több release, mint retain.

4 „Konstruktor”, „Destruktor” Alloc/Init „konstruktor”, objektum létrehozásakor hivjuk meg, a referencia számlálót 1-re állitja NSObject *obj = [[NSObject alloc] init]; // egyéb műveletek [obj release]; Dealloc „destruktor” objektum felszabaditásakor hivódik meg

5 Objektum birtoklás Egy objektumnak több tulajdonosa lehet A létrehozó lesz az első tulajdonosa, más tulajdonosoknak retain-t kell hivniuk A tulajdonos felel az objektum felszabaditásáért Dealloc-t a tulajdonos se hivhat direktben Tulajdonos nélküli objektumok automatikusan felszabadulnak

6 Autorelease Autorelease hivás, akkor jó ha nem akarjuk megtartani az objektumot, csak ideiglenesen kell Autorelease pool Automatikusan rendelkezésre áll az apphoz, de manuálisan is létrehozható NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // Code benefitting from a local autorelease pool. [pool release];

7 Autorelease példa NSString * sushiName = [_sushiTypes objectAtIndex:indexPath.row]; NSString * sushiString = [[[NSString alloc] indexPath.row, sushiName] autorelease]; cell.textLabel.text = sushiString;

8 Memória kezelés szabályai Az alloc/new/copy/mutableCopy metódusoknál retain nálunk van Más metódusok által visszaadott objektumok, csak egyszer használhatóak Factory pattern metódusok, pl: stringWithFormat, imageWithData „Autorelease pending”, azt jelenti, hogy az objektum fel lesz szabaditva automatikusan

9 Property Deklarált property-k, osztályváltozók eléréséhez Tömörebb kód, automatikusan generált Person : NSObject { NSString *location;

10 Property formátuma Writeability (readonly,readwrite) Setter (assign,copy,retain) Atomicity (writeability,setter,atomicity) type name=ivarName;

11 Property példa

12 Property példa 2

13 ARC – Automatic Reference Counting iOS5 egyik nagy újdonsága Retain, Release, és Autorelease többet nem használható vele! Forditási időben kerülnek be a retain/release hivások a kódba

14 ARC használatának megkötései Tilos használni a retain/release/autorelease hivásokat. Dealloc-t nem szabad többet hivni Property assign/retain/copy helyett, weak/strong C Sruct pointereknek vége, malloc/free se lehet NSAutoReleasePool

15 Strong Pointer Strong pointer Ez felel meg a retainelt objektumoknak. Tulajdonosai az objektumoknak, amig hivatkoznak az objektumra, addig nem szabadul fel az objektum. NSString *firstName = self.textField.text; ARC-vel forditott kódban ez egy retainelt változó lesz és a firstName hatókörében végig megmarad. NSString

16 Weak pointer __weak NSString *weakName = self.textField.text ;NSString

17 Property ARC-vel Strong // Nem ARC kompatibilis NSObject *obj; // ARC kompatibilis NSObject *obj; Weak // Non-ARC Compliant NSObject *parentObj; // ARC Compliant NSObject *parentObj;

18 ARC-vel megszűnő hibák id obj = [ array objectAtIndex :0] ; [ array removeObjectAtIndex :0] ; NSLog obj ) ; __weak NSString * str = [[NSString alloc ] initWithFormat :... ] ; NSLog str ) ; // will output "(null)" Helyette : __strong NSString * firstName = self.textField.text; NSString

19 Kérdések


Letölteni ppt "Objective-C Memória kezelés Készítette: Fahmi Arman B5EXTQ 2014.03.20."

Hasonló előadás


Google Hirdetések