Until five minutes I was sure that my understanding about Objective c reference counting is excellent, but when I started checking objects retainCount I was very surprised to see what I saw.
For example myViewController has a UITableview:
.h file
@interface RegularChatViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
{
UITableView *_tableView;
}
@property (nonatomic, retain) IBOutlet UITableView *tableView;
.m file
@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]);
}
To my surprise the input was:
tableView retain count: 1
tableView retain count: 2
tableView retain count: 3
obviously STEP ONE increase retain count by 1 with alloc
I also know that STEP THREE increase retain count by 1 with addSubview
But whats going on in STEP TWO ??? why did it increase the retain count???
is there something to do with ARC??