ストーリーボードを使わずに下記のようなコードを使用し、 UIViewController 内部で UITableView の Delegate を呼び出したいです。

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    UITableView *tableView = [[UITableView alloc] init];
    tableView.frame = CGRectMake(0, 0, 300, 200);
    tableView.tag = 1;
    tableView.delegate = self;

    [self.view addSubview:tableView];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - TableView

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    NSLog(@"1");
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section{
    NSLog(@"2");
    return 5;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell= [[UITableViewCell alloc] init];

    NSLog(@"3");
    return cell;
}

@end

ヘッダファイルは以下のようになっています。

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

デリゲートを設定しているはずなのにデリゲートメソッドが呼び出されないのはなぜなのでしょうか?

iOSのUIViewControllerにtableViewを追加する場合
似たような投稿がありましたがストーリボードを使用せずにコードのみで実装したいです。