Bis zu fünf Minuten war ich mir sicher, dass mein Verständnis von Objective-Referenzzählung ausgezeichnet ist, aber als ich anfing Objekte zu überprüfen, war ich sehr überrascht zu sehen, was ich sah.Objective c - Referenzzählung
Zum Beispiel MyViewController hat eine UITableView:
.h-Datei
@interface RegularChatViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
{
UITableView *_tableView;
}
@property (nonatomic, retain) IBOutlet UITableView *tableView;
.m-Datei
@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]);
}
der Eingang Zu meiner Überraschung war:
tableView retain count: 1
tableView retain count: 2
tableView retain count: 3
offensichtlich SCHRITT EINS Erhöhung Beibehaltungszähler um 1 mit alloc
Ich weiß auch, dass SCHRITT DREI Anstieg Beibehaltungszähler um 1 mit addSubview
Aber was ist in SCHRITT ZWEI los ??? Warum hat es die Retain-Anzahl erhöht?
gibt es etwas mit ARC zu tun ??
Vielleicht, weil '.frame' nicht ohne die Tabellenansicht existieren kann und daher die Retain-Anzahl addiert? –
Gute Schätzung; aber 'frame' gibt eine Struktur direkt zurück; nicht einmal eine Referenz. Keine Abhängigkeit dort. – bbum