Fino a cinque minuti ero sicuro che la mia comprensione del conteggio dei riferimenti Objective c è eccellente, ma quando ho iniziato a controllare gli oggetti retainCount sono rimasto molto sorpreso nel vedere ciò che ho visto.Obiettivo c - Conteggio di riferimento
Per esempio myViewController ha un UITableView:
file h
@interface RegularChatViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
{
UITableView *_tableView;
}
@property (nonatomic, retain) IBOutlet UITableView *tableView;
di file .m
@synthesize tableView = _tableView;
- (void)loadView
{
_tableView = [[UITableView alloc] init]; // STEP ONE
NSLog(@"tableView retain count: %d",[_tableView retainCount]);
self.tableView.frame = CGRectMake(0, 0, 320, tableHeight); // STEP TWO
NSLog(@"tableView retain count: %d",[_tableView retainCount]);
[self.view addSubview:self.tableView]; // STEP THREE
NSLog(@"tableView retain count: %d",[_tableView retainCount]);
}
Con mia grande sorpresa l'ingresso era:
tableView retain count: 1
tableView retain count: 2
tableView retain count: 3
ovviamenteFASE UNO aumento mantenere conteggio da 1 con alloc
So anche che l'aumento FASE TRE mantenere conteggio da 1 con addSubview
Ma cosa sta succedendo nel FASE DUE ??? perché ha aumentato il conteggio dei ritiri ???
c'è qualcosa a che fare con ARC ??
Forse perché '.frame' non può esistere senza la vista tabella e quindi aggiunge il conteggio di conservazione? –
Buona congettura; ma 'frame' restituisce una struttura direttamente; nemmeno un riferimento. Nessuna dipendenza lì. – bbum