直到五分钟,我才确信我对 Objective c 引用计数的理解非常好,但是当我开始检查对象的 retainCount 时,我很惊讶地看到我所看到的。
例如 myViewController 有一个 UITableview:
.h 文件
@interface RegularChatViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
{
UITableView *_tableView;
}
@property (nonatomic, retain) IBOutlet UITableView *tableView;
.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]);
}
令我惊讶的是,输入是:
tableView retain count: 1
tableView retain count: 2
tableView retain count: 3
显然 STEP ONE 将保留计数增加 1alloc
我也知道第三步将保留计数增加 1addSubview
但是第二步发生了什么???为什么它增加了保留数???
和ARC有关系吗??