2012-03-27 16 views
0
target_locations[ 0] = [[CLLocation alloc] initWithLatitude : 51.50373056 
                 longitude : 0.129986111]; 
    [target_locations[ 0] release]; 

Betrachten Sie den oben genannten Code, ist es die richtige Methode, um das zugewiesene Objekt eine Retain-Anzahl von 1 zu behalten?NSMutableArray Retain Count

* Angenommen, ARC ist nicht aktiviert.

+1

Die Antwort hängt davon ab, welcher Typ 'target_locations' ist (obwohl Sie' _really_ '_freigabe' niemals an das Objekt im Array senden sollten). 'NSArray' oder Plain-C-Array? –

+2

Denken * Ownership *, nicht * Zählung behalten *. Oder, wenn es sein muss, lassen Sie @bbum nicht wissen. –

+0

target_locations ist ein NSArray, hoffe, bbum würde einen Kommentar abgeben ... :) – Stanley

Antwort

1

Da target_locations ist ein NSMutableArray, und das ARC nicht aktiviert ist, hier die richtige Vorgehensweise ist wie folgt:

CLLocation * newLocation = [[CLLocation alloc] initWithLatitude : 51.50373056 
                 longitude : 0.129986111]; 
target_locations[0] = newLocation; 
[newLocation release]; 

Sie nicht release auf das Ergebnis eines Arrays Zugriff senden sollte, weil Sie don‘ t besitzen dieses Objekt durch diesen Zeiger. Während es funktioniert in diesem Fall, ist es semantisch falsch und zu wahrscheinlich, um Probleme zu verursachen, wenn Sie in die Gewohnheit kommen.

Denken Sie auch darüber nach, target_locations in targetLocations umzubenennen, was konsistent mit Cocoa-Stil ist. Wenn Sie den Unterstrich verwenden, sieht es eher wie ein einfaches C-Array aus als ein Objekt.

Verwandte Themen