Pourquoi retainCount = 2 – après la publication?

J'utilise ce code.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. view = [[UIView alloc] init]; [_window addSubview:view]; [view release]; NSLog(@"count - %d", [view retainCount]); [self.window makeKeyAndVisible]; return YES; } - (IBAction)click{ NSLog(@"count - %d", [view retainCount]); } 

Quand je clique sur uibutton – ma vue retient count = 2. Pourquoi cela se passe-t-il?

S'il vous plaît ne countz pas sur retainCount. Lancez les Instruments et voyez s'il y a une fuite. Apple déconseille l'utilisation de retainCount à des fins de debugging:

Important : Cette méthode n'a généralement aucune valeur pour le debugging des problèmes de memory management. Comme un certain nombre d'objects de structure peuvent avoir conservé un object afin de contenir des references, alors que simultanément les pools de libération automatique peuvent contenir un nombre quelconque de versions différées sur un object, il est très improbable que vous puissiez get des informations utiles à partir de cet object. méthode.

Regardez le document NSObjectProtocol et la documentation retainCount . Lisez le Guide de programmation de la memory management pour mieux comprendre le nombre de retenues.

Si je ne me trompe pas, il pourrait être conservé par _window ou d'autres objects, donc si vous appelez [view retainCount]; Dans la méthode dealloc , vous obtiendrez probablement retain count = 0 .

Comme l'a dit Nick Weaver, n'utilisez en aucun cas retainCount , puis retainCount les fuites tout en déboguant les problèmes de memory.

Il vaut mieux que nous ne nous occupions pas de la valeur de retainCount. Il suffit de suivre les règles de memory management: prenez possession de vos ressources lorsque vous en avez besoin, renoncez à la propriété lorsque vous avez terminé et vous n'aurez plus de problème.

Si vous regardez retainCount, vous allez dans le mauvais sens, et vous vous perdrez dans la confusion.

La seule règle concernant le nombre de fois où vous pouvez conserver un object est que chaque conservation doit être équilibrée avec une version.