2009-12-12 2 views
0

Dans un projet à base de vue-simple, j'ai ajouté une variable dans mon fichier appDelegate en utilisant le code suivant:est-ce que les pointeurs d'objectif-c peuvent être réutilisés?

NSObject* gObj; 

@property(noatomic,retain) NSObject* gObj; 

@synthesize gObj; 

Ensuite, dans ma testviewController.m méthode viewDidLoad, j'ai ajouté le code de test suivant:

testAppDelegate* delegate = [[UIApplication sharedApplication] delegate]; 

NSObject* p1 = [NSObject alloc] init];//the reference count is 1 
delegate.gObj = p1;//the reference count of p1 is 2 

[p1 release];//the ref of p1 is 1 again 
[delegate.gObj release];//the ref of p1 is 0 

NSObject* p2 = [NSObject alloc] init]; // a new object 
delegate.gObj = p2;//this time the program crash, why? should not the pointer be supposed to be re-used again? 

Merci.

+3

Formatez votre article de sorte que le code soit dans des blocs de code. Nettoie ça. Il va payer des dividendes. – Sneakyness

Répondre

11

c'est écraser parce que quand vous faites

delegate.gObj = p2; 

interne la méthode setGObj de votre délégué libère l'ancienne valeur de gObj avant de retenir la nouvelle valeur.

donc au lieu de

[delegate.gObj release]; 

lorsque vous avez terminé avec p1 que vous voulez faire

delegate.gObj = nil; 

qui non seulement communiqué p1 mais aussi dire au délégué de lâcher.

Questions connexes