2010-08-26 4 views
0

Cette question fait suite à une question previous. Cependant, stackoverflow me présente des commentaires - comme cela m'empêche parfois de donner une réponse correcte à ma propre question.La suppression de conserver de l'application bloque l'application même si la propriété est définie pour conserver

De toute façon, j'ai un peu d'étrangeté qui se passe dans mon application. J'ai une propriété:

@property (nonatomic, retain) NSMutableArray *hotelList; //I also synthesize it 

Voilà comment je suis en train de la propriété:

- (void)populateHotelList 
{ 
    SearchWebServiceController *searchWS = [[SearchWebServiceController alloc]init]; 

    //If I remove this retain the App crashes 
    hotelList = [[searchWS getHotelsByRegionCode:@"12345" AndByKid:@"12345"] retain]; 

    [searchWS release]; 
} 

Toutefois, si je retire la retienne mes application se bloque. Mais selon la documentation d'Apple, je ne devrais pas besoin de le conserver ?!

Ceci est la mise en œuvre de la méthode:

- (NSMutableArray *)getHotelsByRegionCode:(NSString *)regionCode 
           AndByKid:(NSString *)Kid 
{ 
    NSMutableArray *result = [[NSMutableArray alloc]init]; 

    ... 

    return [result autorelease]; 
} 

Quelqu'un peut-il s'il vous plaît aider!

Répondre

0

Ajout de l'auto-qualificateur et cela a fonctionné.

self.hotelList = [searchWS getHotelsByRegionCode: @ "12345" AndByKid: @ "12345"];

Grâce à spbfox!

0

Vous devez le conserver car votre méthode renvoie l'objet autorelease qui sera détruit dans la boucle d'événement suivante.

+0

Mais ses 2 classes différentes. Donc la classe appelée l'autoeleasing et la classe appelante le conserve? Pouvez-vous expliquer si vous avez une chance? – TheLearner

+0

La propriété possède également un attribut retain – TheLearner

+0

Il est normal que ces classes soient différentes car l'objet avec lequel elles travaillent est le même, de sorte qu'elles affectent le même compteur de rétention. Cependant, le fait que la propriété soit conservée rend ma publication incorrecte. Cela signifie également que le problème n'est pas dans le code que vous avez publié. Pouvez-vous dire où exactement le code échoue sans retenir? – spbfox

Questions connexes