5分まで、Objective cの参照カウントについての私の理解は優れていると確信していましたが、retainCountオブジェクトの検査を開始したとき、私は何を見たのか非常に驚いていました。目的c - 参照カウント
例えば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増加は、私もそのSTEP THREE増加を知ってalloc
と1で、カウントを保持addSubview
と1で、カウントを保持しているが、STEP TWOで起こっていただきました!?なぜそれが保持カウントを増やしたのですか?
ARCとは関係がありますか? retainCount
方法についてNSObject Protocol Reference上のAppleのドキュメントによると
おそらく '.frame'はテーブルビューなしでは存在できず、したがって保持カウントを追加するでしょうか? –
良い推測; 'frame'は構造体を直接返します。参照でさえない。そこに依存関係はありません。 – bbum