2011-01-11 12 views
1

Ist es richtig, Speicher für ein Array zuzuweisen, das als Eigenschaft in der Methode initWithNibName definiert ist, wenn ich keinen Speicher mehr dafür reservieren will (auch wenn die Ansicht pop und dann gedrückt wird) nochmal)?Iphone Speicher in initWithNibName reservieren

Dank

Antwort

2

Nun, wenn eine Ansicht gezeigt wird, und dann versteckt, erhalten sie sowohl eine initWithNibName und dann ein release; so, was Sie tun sollten, ist so etwas wie dieses:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    yourArray = [[NSArray alloc] init]; 
} 

- (void) dealloc 
{ 
    [yourArray release]; 
    [super dealloc]; 
} 

Egal, wie kurz das Leben des View-Controller, wird es dennoch Release erhalten auf entlassen, was wiederum wird schließlich in dealloc führen genannt zu werden.

2

Es ist korrekt, nur stellen Sie sicher, es in Ihrem dealloc zu veröffentlichen. stellen Sie sicher, dass, wenn Sie Alloc Initing Sie nicht Ihre Setter verwenden, stattdessen sollten Sie init die Instanzvariable Alloc direkt:

_myArray = [[NSArray alloc]init]; 

, wenn Sie nur durch die Eigenschaft Methode gehen, dann so etwas tun:

self.myArray = [NSArray array]; 

wieder vergessen sie nicht, es in Ihrem dealloc zu lösen:

-(void)dealloc 
{ 
    [_myArray release]; 
    [super dealloc]; 
} 
+0

warum should't ich meine Setter verwenden? Danke – xger86x

+0

Weil, wenn Sie eine "behalten" (die Sie wahrscheinlich haben) oder "kopieren" -Eigenschaft haben, dann, wenn Sie Ihren Setter verwenden, wenn Sie initing zuweisen, dann wird dieses Objekt zweimal erhalten: 1. Bei der Alloc-Methode. 2. An deinem Setter. und das wird dazu führen, dass Ihr Speicher ausläuft, da Sie "Release" nur einmal aufrufen. (und Sie sollten Release nur einmal aufrufen.) Also, wenn Sie den Setter verwenden möchten, erhalten Sie ein automatisch freigegebenes Objekt. –

Verwandte Themen